对setjmp 和 longjmp 的学习

学习网络上的文章: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 之后的下一行的位置

你可能感兴趣的:(long)