起因:在c语言工程代码当中,常常要处理各种关于异常的处理,每次当程序比较复杂的时候,就必须用好几个if来嵌套使用,比如
if (xxx) { if(xxx) { } else { return ERR_NO; } } |
这样的代码显得非常混乱,也不容易管理,我一直在寻找能跟c++异常机制类似的功能,如果有这样的功能,那么c语言的异常处理不是也很容易打理了么?
由于c的工程当中一般错误都有专有的错误列表,所以在这边,在我们的机制里我只添加了关于错误Id的异常捕捉处理。
思路:
首先,我使用了#define来将c当中没有的关键词替代,比如try,catch,throw,先想到的是用return,break之类的c语言当中先有的关键词来模拟,这就有了我的第一个版本:
#ifndef EXCEPTION_H #define EXCEPTION_H // 一个不成熟的exception机制 typedef unsigned int ERR_TYPE; #define NO_ERR 0 static ERR_TYPE err; //try-catch-throw错误处理机制 #define try do #define catch(N) while(0);if(N>=NO_ERR) #define throw(N) err=N;break; #define throwAgain(N) err=N;return; #endif |
调用实例代码:
void f(void) { try { throw(6); } catch(err) { throwAgain(err); } } int main() { try { f(); } catch(err) { printf(“%d”, err); } } |