トップページ – C言語編 – 標準ライブラリのリファレンス(名前順)
トップページ – C言語編 – 標準ライブラリのリファレンス(ヘッダ別)
概要 |
呼び出し環境を復元する |
|
ヘッダ | ||
形式 |
void longjmp(jmp_buf env, int val); |
|
引数 |
env |
|
val |
復元後に setjmp関数の戻り値として使う値。0 を指定した場合は 1 に修正される |
|
戻り値 |
なし |
|
詳細 |
setjmp関数によって保存された呼び出し環境を復元する。自動記憶域期間をもつオブジェクトの値やレジスタの値など、実行の再開に必要な情報が復元された後、setjmp関数の呼び出し箇所にジャンプし、setjmp関数の呼び出しから戻ってくる形で再開する。このとき、setjmp関数の戻り値が、longjmp関数の第2引数の値になる。ただし 0 を指定していた場合は 1 に修正される(setjmp関数を普通に呼び出したときに 0 を返す仕様であるため、それと区別を付けるための処置である)。 setjmp関数を呼び出した位置と、longjmp関数を呼び出す位置が、別関数内であっても構わない。つまり、別関数への goto のような処理が実現できる。これは非局所ジャンプと呼ばれる。ただし、すでに実行を終えている関数へはジャンプできない。 |
|
注意 |
volatile修飾子がない自動記憶域期間を持つオブジェクトの値が、setjmp関数の呼び出しと、longjmp関数の呼び出しとの間で変更された場合、復元後の値は不定である。 |
|
使用例 |
実行結果:
|
|
関連 | ||
解説章 |
本ページはアフィリエイトプログラムによる収益を得ています。
以下のリンクから商品を購入されると、Programming Place
管理者に紹介料が支払われています。
()
の前後の空白の空け方)(
の直後、)
の直前に空白を入れない)return 0;
を削除(C言語編全体でのコードの統一)新規作成。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |