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;
}

 

posted @ 2017-03-14 15:19  wangxusummer  阅读(212)  评论(0编辑  收藏  举报