bmath.h
にもどるbstdio.h
にすすむbsetjmp.h
setjmp / longjmp
の定義。
jmp_buf
は CPU によってその定義は異なっている。
typedef int jmp_buf[6];
|
int setjmp(jmp_buf env)
jmp_buf env 環境を保存するための領域
≠0 longjmpの呼び出しから復帰する場合 (実際は longjmp() の引数 rval の値を返す) =0 setjmpを呼び出して戻ってきた場合
呼び出した時点での環境を保存し、longjmp
が実行された時に復帰できる状態にする。
setjmp()
は以下のいずれかに使用すること。
選択文(if, switch)の制御式 反復文(while, do〜while, for)の制御式 制御式中の、一方が整数定数式である関係演算子のオペランド 制御式中の、等価演算子のオペランド 制御式中の、!演算子のオペランド 式文の全ての式
次の処理から抜けるために longjmp()
を使用するのは危険である。
割り込み処理 例外処理 シグナル処理
setjmp()
はインライン展開できる、
単純化した式として、局所変数、
一時変数を必要としないようにすること。
longjmp()
|
void longjmp(jmp_buf env, int rval)
jmp_buf env 保存した環境の領域 int rval setjmp()のリターン値として使う値(≠0)
なし
最後に実行した setjmp()
により配列 env
に保存された環境を復元する。
実行は setjmp()
を呼んだ場所から始まる。
当関数は元の setjmp()
の呼出側に引数
rval
を返す。この時 rval
は
setjmp()
が返したようにみなしても良い。
rval
に 0 が指定された場合、setjmp
のリターン値は1となる。
setjmp()
で環境保存されていない場合に
longjmp()
を呼び出すと動作は保証されない。
setjmp()
bmath.h
にもどるbstdio.h
にすすむ