setjmp/longjmp 处理异常

#include <stdio.h>
#include <stdlib.h>
#include <setjmp.h>

jmp_buf jb;

void f1()
{
    printf("进入f1()
");
    if(0/*正确执行*/){ }
    else {
        longjmp(jb,1);
    }
    printf("退出f1()
");
}
void f2()
{
    printf("进入f2()
");
    if(1/*正确执行*/) {  }
    else {
        longjmp(jb, 2);
    }
    printf("退出f2()
");
}

int main()
{
    int r = setjmp(jb);
    if(r==0){
        f1();
        f2();
    }else if(r==1){
        printf("处理错误1
");
        exit(1);
    }else if(r==2){
        printf("处理错误2
");
        exit(2);
    }
    return 0;
}
原文地址:https://www.cnblogs.com/wangxusummer/p/6548681.html