setjmp()とlongjmp()の2つの関数を利用することで、関数を超えたグロー バルジャンプが行なえる。
グローバルジャンプはどこでも好きな箇所へジャンプを行なえるわけではなくて、 「過去に一度でも処理をしたところならば、実行中の関数内であっても実行中の 関数外であっても戻ることができる」という機能である。
これは、setjmp()で処理した場所のプログラムカウンタの値を覚えておき、 longjmp()が実行されたときにプログラムカウンタを「覚えていた値」に戻すこ とによって、プログラムの実行を制御するものである。setjmp()ではプログラム カウンタの値を覚えるためにtypedefされた「jmp_buf」型の変数を利用する。
次にグローバルジャンプの例を示します。
通常は、第2引数に「0」以外の値をいれ、setjmp()関数の戻り値を見て、それが 最初のものなのか、longjmp()関数からの戻り値なのかを判断するようにする。