Oracle Solaris Studio 12.4 Man Pages

印刷ビューの終了

更新: January 2015
 
 

longjmp(3F)

名前

longjmp , isetjmp - isetjmp で設定された場所に longjmp が戻る

形式

Usage: isetjmp:
 
integer*4  env(12)
common /jmpblk/ env
j = isetjmp( env )
     
Usage: longjmp:

 
integer*4  env(12)
common /jmpblk/ env
call longjmp(env,ival)
     
64 ビット環境でコンパイルする場合、これらのルーチンで使用される 12 個の要素配列 
env が INTEGER*8 と宣言されている必要があります。

説明

isetjmplongjmp ルーチンは、プログラムの低レベルルーチンで発生するエラーや割り込みに対処する際に使用されます。これらのルーチンを使用するには経験が必要であり、移植性もないため、最後の手段としてのみ使用するようにしてください。バグやその他の詳細については、setjmp(3C) のマニュアルページを参照してください。

isetjmp は、env にスタック環境を保存します。レジスタ環境も保存されます。

longjmp は、isetjmp を最後に呼び出した際に保存された環境を復元し、その環境に戻り、isetjmp を呼び出すことで値 ival が返されたかのように実行を継続します。

isetjmp から返される整数式 ival は、longjmp が呼び出されない場合はゼロ、longjmp が呼び出される場合はゼロ以外の値となります。

例: isetjmplongjmp を使用しているコードの一部:

 
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)