学习网络上的文章:http://blog.sina.com.cn/s/blog_7ffcb1410100s0ut.html
然后我自己做了一下简单地验证:
[root@localhost test]# cat testjmp.c #include<stdio.h> #include<setjmp.h> jmp_buf ebuf; int ftaste(); int main() { int i; fprintf(stderr,"1\n"); i=setjmp(ebuf); if (i==0) { ftaste(); fprintf(stderr,"This will not be run\n"); }else{ fprintf(stderr,"Now i is %d\n",i); } fprintf(stderr,"%d\n",i); return 0; } int ftaste() { fprintf(stderr,"2\n"); longjmp(ebuf,3); } [root@localhost test]#
改成这样后,运行的结果是:
[root@localhost test]# ./testjmp.o
1
2
Now i is 3
3
也就是说,设置好 setjmp 以后
longjmp 会跳转到 setjmp 之后的下一行的位置