マニュアルページ longjmp.3f
名前
longjmp, isetjmp - longjmp は isetjmp で設定された場所に戻る
形式
使用法: isetjmp:
integer*4 env(12)
common /jmpblk/ env
j = isetjmp( env )
使用法: longjmp:
integer*4 env(12)
common /jmpblk/ env
call longjmp(env,ival)
64 ビット環境でコンパイルする場合、これらのルーチンで使用 さ
れる 12 要素配列 env が INTEGER*8 に宣言されている必要があり
ます。
機能説明
isetjmp と longjmp ルーチンは、プログラムの低レベルルーチ ン
で発生するエラーや割り込みを処理するために使用します。これら
のルーチンは最後の手段としてのみ使用するようにしてください。
こ れ らのルーチンを使用するには、ある程度の経験が必要ですの
で、取り扱いには十分注意してください。また、これらのルーチン
は 移 植性がありません。使用上の留意点、その他の詳細について
は、 setjmp(3c) のマニュアルページを参照してください。
isetjmp は、 env にスタック環境を保存します。レジスタ環境 も
保存されます。
longjmp は、 isetjmp を最後に呼び出して保存した環境 を 復 元
し、 あたかも isetjmp の呼び出しが値 ival を返したかのように
戻り、実行を継続します。
isetjmp から戻される整数式 ival は、 longjmp が呼び出され て
い ない場合はゼロ、 longjmp が呼び出されている場合にはゼロ以
外の値となります。
例: isetjmp と longjmp を使用しているコード
integer*4 env(12)
common /jmpblk/ env
j = isetjmp( env ) ! <-- isetjmp
if ( j .eq. 0 ) then
call sbrtnA
else
call error_processor
end if
end
subroutine sbrtnA
integer*4 env(12)
common /jmpblk/ env
call longjmp( env, ival ) ! <-- longjmp
return
end
注意事項
longjmp() を呼び出す前に、 isetjmp を呼び出さなければなり ま
せん。
isetjmp の引数は 12 個の整数からなる配列でなければなり ま せ
ん。
isetjmp を呼び出すルーチンから longjmp を呼び出す ルー チ ン
へ、 共通ブロックを通じてあるいは引数として env 変数を渡さな
ければなりません。
longjmp() は、スタックを空にしようとします。
longjmp() は、 isetjmp() よりも低いレベルのルーチンから呼 び
出さなければなりません。
手続き名を引数として、 isetjmp を引き渡そうとしても正しく 機
能しません。
使用上の留意事項
setjmp(3c) を参照してください。
ファイル
libC.a
関連事項
setjmp(3C)