≫ ホーム ≫ C言語ヘッダファイル別一覧 | C言語アルファベット別一覧 ≫ setjmp.h ≫ longjmp
同じプログラム中の最後に呼び出された setjmp マクロによって保存された環境を復元します.
#include <setjmp.h>
void longjmp( jmp_buf env, int val );
longjmp 関数は,同じプログラム中で対応する jmp_buf 型の引数をもって最後に呼び出された setjmp マクロによって保存された環境を復元します.
longjmp が完了すると,対応する setjmp が引数 val で指定された値を返したものとしてプログラムを続行します. ただし,setjmp に 0 を返させることはできません. (引数 val に 0 を指定した場合は 1 を返します)
以下の場合の動作は未定義です.
以下に longjmp 関数を使用したサンプルプログラムを示します.
/* header files */
#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>
/* main */
int main(void) {
jmp_buf env;
int retVal = 0;
/* jmp_bufに実行コンテキストを保存 */
if ( (retVal = setjmp(env)) == 0 ) { /* :-) */
printf("%d\n", retVal);
/* :-) に復帰. 復帰後の setjmp は 1 を返す */
longjmp(env, 1);
} else {
printf("%d\n", retVal);
return EXIT_SUCCESS;
}
return EXIT_SUCCESS;
}
サンプルプログラムの実行結果は以下のようになります.
0 1