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 にすすむ