isetjmp と longjmp ルーチンは、プログラムの低レベルルーチンで遭遇するエラーや障害を処置するために使用します。この 2 つは、f95 の組み込み関数です。
これらのルーチンは、最後の手段としてのみ使用してください。これらの取り扱いには、十分注意してください。 また、移植性はありません。バグやその他の詳細については、setjmp(3V) のマニュアルページを参照してください。
isetjmp は env にスタック環境を保存します。またレジスタ環境も保存します。
longjmp は、最後に isetjmp を呼び出して保存した環境を復元し、あたかも isetjmp の呼び出しが値 ival を返したかのように戻り、実行を継続します。
isetjmp から返された整数式 ival は、longjmp が呼び出されなければゼロです。longjmp が呼び出されれば、ゼロ以外になります。
例: isetjmp と longjmp を使用したコード部分
INTEGER*4 env(12) common /jmpblk/ env j = isetjmp( env ) 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 ) return end |