longjmp

スタック環境と実行ロケールを復元します。

void longjmp(
   jmp_buf env,
   int value 
);

パラメーター

  • env
    環境が格納されている変数。


  • setjmp 関数に返す値。

解説

longjmp 関数は、setjmp 関数によって env に保存されたスタック環境と実行ロケールを復元します。 setjmp 関数と longjmp 関数では、非ローカル goto を実行できます。一般に、これらの関数は、通常の呼び出し規約や復帰規約に従わずに、以前に呼び出したルーチンのエラー処理コードまたは回復コードに実行制御を渡すときに使用します。

setjmp 関数を呼び出すと、現在のスタック環境が env に保存されます。 その後で longjmp 関数を呼び出すと、保存されている環境が復元され、対応する setjmp 関数呼び出しの直後の位置に制御が戻ります。 この結果、setjmp 関数によって値が返されたかのように実行が再開されます。 制御を受け取るルーチンがアクセスできるすべての変数 (レジスタ変数を除く) には、longjmp 関数が呼び出されたときの値が残っています。 レジスタ変数の値は予測できません。 setjmp 関数が返す値は、0 以外であることが必要です。 値が 0 で渡されると、実際の戻り値は 1 に置き換えられます。

longjmp 関数は、setjmp 関数を呼び出した関数が値を返す前に呼び出します。そうしないと、結果は予測できません。

longjmp 関数を使用するときは、次の制約に従う必要があります。

  • レジスタ変数の値がそのまま残っているとは想定しないでください。 setjmp 関数を呼び出したルーチンのレジスタ変数の値は、longjmp 関数を実行しても適切な値に復元されないことがあります。

  • 割り込みが浮動小数点例外によって発生した場合以外は、longjmp 関数を使用して割り込み処理ルーチンから制御を移さないでください。 浮動小数点例外によって発生した場合、プログラムは、まず _fpreset 関数を呼び出して浮動小数点演算パッケージを再初期化してから、longjmp 関数を使用して割り込みハンドラーから戻ることができます。

    メモ   setjmp 関数と longjmp 関数を C++ プログラムで使用する場合は注意が必要です。 これらの関数では C++ オブジェクトの意味論をサポートしていないため、C++ 例外処理機構を使用する方が安全です。

詳細については、「setjmp と longjmp の使用」を参照してください。

必要条件

ルーチン

必須ヘッダー

longjmp

<setjmp.h>

互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。

ライブラリ

C ランタイム ライブラリのすべてのバージョン。

使用例

_fpreset」の例を参照してください。

同等の .NET Framework 関数

該当なし標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。

参照

参照

プロセス制御と環境制御

setjmp