非局所分岐を行います。
[所属]
標準ライブラリ
[指定形式]
#include <setjmp.h>
void longjmp(jmp_buf env, int val);
[詳細説明]
setjmpで保存されたenvを使い,setjmp直後へ非局所分岐します。valは,setjmpの返却値となります。
【setjmp.hにおけるjmp_buf型の定義】
[注意事項]
本関数が退避/復帰するのはコンパイラで予約したレジスタのみです。
22レジスタ・モード, または共通レジスタ・モードの関数内でsetjmpを呼び出し,32レジスタ・モードの関数内でr20~r24を破壊した後に本関数を呼び出した場合,r20~r24の値は回復しません。本関数を呼び出す前に,r20~r24を回復しておく必要があります。
[使用例]
#include <setjmp.h>
#define ERR_XXX1 1
#define ERR_XXX2 2
jmp_buf jmp_env;
void main(void) {
for(;;) {
switch(setjmp(jmp_env)) {
case ERR_XXX1:
/*error XXX1の終結処理*/
break;
case ERR_XXX2:
/*error XXX2の終結処理*/
break;
case 0: /*非局所分岐ではない*/
default:
break;
}
}
}
void funcXXX(void) {
longjmp(jmp_env, ERR_XXX1); /*error XXX1の発生により非局所分岐*/
longjmp(jmp_env, ERR_XXX2); /*error XXX2の発生により非局所分岐*/
}
|