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)