C中的try-catch

之前看lua源码,看到LUAI_TRY没当回事,以为就是直接调用。
今天细细调查后发现还真是学到了新玩意儿。照猫画瓢写了一个小例子。
费话不多说,show you the code.

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

#define DECLARE_TRY_CATCH() jmp_buf gJmpBuf; int gSetjmpRet = 0
#define TRY(foo) if((gSetjmpRet = setjmp(gJmpBuf)) == 0) {foo;}
#define CATCH() switch(gSetjmpRet)
#define THROW(errNo) longjmp(gJmpBuf, errNo)

DECLARE_TRY_CATCH();
void sub(errNo) {
    printf("in sub function. do something...\r\n");
    THROW(errNo);
    printf("after throw will be never outputed!\r\n");
}

void second(void) {
    printf("start second\r\n");
    sub(2);
    printf("end second\r\n");
}

void first(void) {
    printf("start first\r\n");
    sub(1);
    printf("end first\r\n");
}

int main() {
    TRY(first());
    CATCH() {
        case 1:
            printf("catch err1, when call first\r\n");
            break;
        case 2:
            printf("catch err2, when call first\r\n");
            break;
        default:
            printf("catch unknown, when call first\r\n");
            break;
    }

    TRY(second());
    CATCH() {
        case 1:
            printf("catch err1, when call second\r\n");
            break;
        case 2:
            printf("catch err2, when call second\r\n");
            break;
        default:
            printf("catch unknown, when call second\r\n");
            break;
    }
    return 0;
}
运行结果
start first
in sub function. do something...
catch err1, when call first
start second
in sub function. do something...
catch err2, when call second

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值