#inlcude <setjmp.h>
#include <stdio.h>
jmp_buf buf;
void b()
{
printff("a\n");
longjmp(buf,1); // longjmp(buf,i) 返回值为i
printff("b\n");
}
int main()
{
int ga;
ga = setjmp(buf); //设置成功会初始值为0,跳到这的时候返回值为 longjmp设置的i
if(ga)
{
printf("1\n");
}
else
{
b();
}
return 0;
}
需要注意的是:保证局部变量在longjmp过程中一直保持它的值唯一可靠的方法是把他声明为:volatile。-适用于那些值在setjmp和longjmp之间会改变的变量。
setjmp/longjmp 最大的用途是错误恢复。一旦发现一个不可恢复的错误,可以把控制转移到主输入循环。