关于setjmp和longjmp
前段时间看C专家编程遇到setjmp和longjmp,没有特别在意.这两天看深入理解计算机系统,再次提到setjmp和longjmp.觉得很巧妙,写个小程序测试一下其特性: 1 //longjmp每一次都跳到setjmp的地方,正所谓是保存了当时的堆栈情况 2 //如此看来,setjmp和longjmp的配对,和fork()函数有可比性: 3 //fork()一个函数执行两次,返回两个不同的值,一个是0,一个是subprocess id. 4 //而,longjmp则跳转到setjmp的位置,setjmp返回的值第一次是0,以后就由longjmp的参数决定 5 6 #include <stdio.h> 7 #include <setjmp.h> 8 #include <stdlib.h> 9 10 sigjmp_buf buf; 11 12 void fun() 13 { 14 printf("%s..........",__func__); 15 longjmp(buf, 2); 16 exit(0); 17 } 18 void bar() 19 { 20 printf("%s\n",__func__); 21 exit(0); 22 } 23 24 void main() 25 { 26 27 int n; ...