トップページ – C言語編 – 標準ライブラリのリファレンス(名前順)
トップページ – C言語編 – 標準ライブラリのリファレンス(ヘッダ別)
概要 |
呼び出し環境を保存する |
|
ヘッダ | ||
形式 |
int setjmp(jmp_buf env); |
|
引数 |
env |
呼び出し環境を保存しておくためのバッファ。 |
戻り値 |
普通にこの関数を呼び出したときは常に 0 が返される。longjmp関数の呼び出しによって呼び出し環境が復元されたときには 0以外の値を返す。 |
|
詳細 |
のちの longjmp関数の呼び出しに先立って、復元される呼び出し環境を保存しておく。つまり、自動記憶域期間を持つオブジェクトの値や、レジスタの情報など、setjmp関数を呼び出した時点での状況を jmp_buf型のオブジェクトに保存する。また、setjmp関数を呼び出している位置そのものが、実行の復帰位置である。 自動記憶域期間でない記憶域期間を持ったオブジェクトの値は保存しない。ファイルのオープン状態も保存されない。浮動小数点例外のフラグについても保存しない。 setjmp関数はマクロとして実装されているかもしれない。 |
|
注意 |
volatile修飾子がない自動記憶域期間を持つオブジェクトの値が、setjmp関数の呼び出しと、longjmp関数の呼び出しとの間で変更された場合、復元後の値は不定である。 setjmp関数の呼び出しは、式文の中で単体で行うか、if/switch、while/for/do といった選択文や繰り返し文の条件式の部分か、他方のオペランドが整数の定数式であるような関係演算子や等価演算子のオペランドでなければならない。たとえば「int x = setjmp(env);」のような使い方は未定義の動作になる。 |
|
使用例 |
実行結果:
|
|
関連 |
呼び出し環境を復元するには longjmp関数を呼び出す。 |
|
解説章 |
本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place
管理者に紹介料が支払われています。
()
の前後の空白の空け方)(
の直後、)
の直前に空白を入れない)return 0;
を削除(C言語編全体でのコードの統一)新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |