プログラムの現在の状態を保存します。
構文
int setjmp(
jmp_buf env
);
パラメーター
env
環境が格納されている変数。
戻り値
スタックの環境を保存した後に 0 を返します。 longjmp呼び出しのためにsetjmp戻った場合は、longjmpのvalue引数を返します。または、longjmpのvalue引数が 0 の場合、setjmpは 1 を返します。 エラーの戻り値はありません。
解説
setjmp 関数はスタックの環境を保存します。この環境は、longjmp を使用して後から復元することができます。 setjmp と longjmp を一緒に使用すると、非ローカルの goto を実行する方法が提供されます。 これらは一般に、通常の呼び出し規則や復帰規則を使用せずに、以前に呼び出されたルーチン内のエラー処理コードまたは回復用コードに実行制御を渡すために使用されます。
setjmp の呼び出しにより、現在のスタックの環境が env で保存されます。 longjmp への後続の呼び出しは、保存されている環境を復元し、対応する setjmp 呼び出しの直後のポイントにコントロールを返します。 コントロールを受け取るルーチンにアクセスできるすべての変数 (レジスタ変数を除く) には、longjmp が呼び出されたときに保持していた値が含まれます。
setjmp を使用して、ネイティブ コードからマネージド コードにジャンプすることはできません。
Microsoft 固有の仕様
Windows 上の Microsoft C++ コードでは、longjmp は、例外処理コードと同じスタック アンワインドセマンティックスを使用します。 これは、C++ の例外が発生する可能性があるのと同じ場所で使用する方が安全です。 ただし、この使用法は移植可能ではなく、いくつかの重要な注意事項があります。 詳細については、「longjmp」を参照してください。
Microsoft 固有の仕様はここまで
Note
移植可能な C++ コードでは、setjmp と longjmp で C++ オブジェクトのセマンティックスがサポートされることを前提にはできません。 具体的には、setjmp と longjmp を catch と throw に置き換えることによって自動オブジェクトのための何らかの重要なデストラクターが呼び出される場合、setjmp/longjmp の呼び出しのペアには未定義の動作があります。 C++ プログラムでは、C++ の例外処理メカニズムを使用することをお勧めします。
詳細については、「setjmp と longjmp の使用」を参照してください。
要件
| ルーチンによって返される値 | 必須ヘッダー |
|---|---|
setjmp |
<setjmp.h> |
互換性の詳細については、「 Compatibility」を参照してください。
例
_fpreset の例を参照してください。