マニュアルページ 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)