-

差分

移動先: 案内検索

Functions HI-TECH C LONGJMP

1,707 バイト追加, 2017年12月29日 (金) 18:38
ページの作成:「<strong>LONGJMP</strong> ==概要== #include <setjmp.h> void longjmp(jmp_buf buf, int val) ==詳細== <strong>Longjmp</strong>()は<strong>setjmp</strong>()...」
<strong>LONGJMP</strong>
==概要==

#include <setjmp.h>

void longjmp(jmp_buf buf, int val)


==詳細==
<strong>Longjmp</strong>()は<strong>setjmp</strong>()と連携して、ローカルでないgotoのためのメカニズムを提供します。この機能を使うためには<strong>setjmp</strong>()
外部レベルの関数からjmp_buf引数と共に呼び出される必要があります。
<strong>setjmp</strong>()からの呼び出しは0を返します。このレベルの実行に戻るには、内部レベルの実行から同じjmp_buf引数と共に呼び出される必要があります。

<strong>setjmp</strong>() をよびだした関数は<strong>longjmp</strong>()が呼び出された時にはアクティブである必要があることに注意してください。
不正データを含むスタック利用のせいで、このルールの違反は、災害を引き起こします。<strong>longjmp</strong>() のval引数は明らかに?<strong>setjmp</strong>()から返されたものです。
純粋な?<strong>setjmp</strong>() 呼び出しからのそれと区別するために
これはゼロであってはダメです。

#include <setjmp.h>

static jmp_buf jb_err;

main()
{
if(setjmp(jb_err)) {
printf("An error occured0);
exit(1);
}
a_func();
}

a_func()
{
if(do_whatever() != 0)
longjmp(jb_err, 1);
if(do_something_else() != 0)
longjmp(jb_err, 2);
}

上記の
<strong>longjmp</strong>()呼び出しは決して値を返しません?
<strong>setjmp</strong>()は値を返すようですが、<strong>longjmp</strong>()に与えられた引数と同じです??

==参照==

setjmp

案内メニュー