#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之间会改变的变量。code
setjmp/longjmp 最大的用途是错误恢复。一旦发现一个不可恢复的错误,能够把控制转移到主输入循环。io