setjmp
更新 : 2007 年 11 月
プログラムの現在の状態を保存します。
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 を使用し、ネイティブ コードからマネージ コードにジャンプすることもできます。
メモ setjmp 関数と longjmp 関数は、C++ オブジェクトのセマンティクスをサポートしていません。C++ プログラムでは、C++ 例外処理機構を使用してください。
詳細については、「setjmp と longjmp の使用」を参照してください。
必要条件
ルーチン |
必須ヘッダー |
---|---|
setjmp |
<setjmp.h> |
互換性の詳細については、「C ランタイム ライブラリ」の「互換性」を参照してください。
使用例
「_fpreset」の例を参照してください。
.NET Framework の相当するアイテム
適用できません。標準 C 関数を呼び出すには、PInvoke を使用します。詳細については、「プラットフォーム呼び出しの例」を参照してください。