≫ ホーム ≫ 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
たくさんあるC言語関連の書籍の中でも特に役に立った本です.よかったら参考にしてみてください.
C言語の実践的参考書.少々値段は張りますが初心者を脱しようとしている人は絶対に読むべきです.
文法だけでなく,コーディングスタイルやデバッグなど文字通り「実践的」なことが書かれているので非常にためになります.
オライリーの本は,読みにくい本が多いのですが本書はとても読みやすくオススメです.
ポインタの解説書としては最高の書籍です.
この1冊でポインタを完全に理解することができます.全くの初学者が読むには敷居が高いですが,入門書を読み終えた後に読むと非常に有益です.