setjmp/longjmp 处理异常
#include <stdio.h> #include <stdlib.h> #include <setjmp.h> jmp_buf jb; void f1() { printf("进入f1()\n"); if(0/*正确执行*/){ } else { longjmp(jb,1); } printf("退出f1()\n"); } void f2() { printf("进入f2()\n"); if(1/*正确执行*/) { } else { longjmp(jb, 2); } printf("退出f2()\n"); } int main() { int r = setjmp(jb); if(r==0){ f1(); f2(); }else if(r==1){ printf("处理错误1\n"); exit(1); }else if(r==2){ printf("处理错误2\n"); exit(2); } return 0; }