《OOC》笔记(2)——C语言实现trycatchfinally

本篇就偷个懒吧,实在打不起精神。

 1 #ifndef _TRY_THROW_CATCH_H_
 2 #define _TRY_THROW_CATCH_H_
 3 
 4 #include <stdio.h>
 5 #include <setjmp.h>
 6 
 7 /* For the full documentation and explanation of the code below, please refer to
 8  * http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html
 9  */
10 
11 #define TRY do{ jmp_buf ex_buf__; switch( setjmp(ex_buf__) ){ case 0: while(1){
12 #define CATCH(x) break; case x:
13 #define FINALLY break; } default:
14 #define ETRY } }while(0)
15 #define THROW(x) longjmp(ex_buf__, x)
16 
17 #endif /*!_TRY_THROW_CATCH_H_*/

此代码的出处在这里(http://www.di.unipi.it/~nids/docs/longjump_try_trow_catch.html

原文的意思,我感兴趣的有如下几点。

1. 这个try catch宏只是一个demo。实际可用的异常机制需要有运行时(Runtime)的支持。也就是说单纯的C语言是不能提供像C#、Java那样的异常捕获机制的。

2. 这个demo使用了setjmp.h里的setjmp(jmp_buf);和longjmp(jmp_buf, int);两个函数。这两个函数很特别。setjmp将当时的CPU状态存入jmp_buf,longjmp将jmp_buf中的内容恢复到CPU。

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值