日経ソフトウェアの9月号を読んでいたら、C言語に関する連載記事でsetjmpとlongjmpの解説が。
存在自体は知っていたけど詳しくは知らなかった。
#include <setjmp.h> int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val);
setjmpで現在の場所を記憶し、longjmpでその場所へ飛ぶ。
#include <setjmp.h> jmp_buf env; void func() { longjmp(env,1); } void main() { if ( setjmp(env) == 0 ) { func(); } else { // longjmpで戻ってきたとき } }
これはどう考えても危険だ。例外処理とかで使うと便利なんだろうけど、C++ではtry〜catchがあるからこれは使わないだろう。
これを使う必要がある場合は、組み込み系とかでハードに近くてCしか使えないような場合くらいしか思いつかない。
自分で使うとなにかしらミスしそうだ。あえてこれを使う必要はないだろう。
それでもこういうのがあるということは知っておくべきだ。