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;
}
相關文章
相關標籤/搜索