C语言实现try catch处理

我们都知道,在Java、C#等高级程序语言中,都自带有异常处理机制,其基本结构如下:
try{
程序语句;
}catch(Exception ex){
异常处理;
}
这样做不但可以防止程序异常终止,而且在出现错误时可以及时作一些释放资源处理,对程序能继续健壮的运行下去尤其重要。

但是C语言中没有这样异常处理机制,我们可以通过宏定义去实现类似这样的操作,这时候就使用到C语言强大而又被我们‘嫌弃’的goto语句了。
这里我们需要定义几个宏:
(1)异常处理框架
d0cfd4a17c8d4e9abdca13bbe6a1ddc5.png
在BEGINPROC和ENDPROC里处理我们的程序,有异常的情况时跳到CATCHERROR和ENDERROR里统一处理
(2)几种异常条件宏定义:
c9d0c9d6bc6345f9bd6f9f809f0ad879.png

(3)异常统一处理宏定义:
e713d164399941eab3b65a5943015c82.png

下面我们来分析这三种情况:
(1)不满足某种条件产生异常跳转:
b224adb2c3ec44c2b1221e7cb77b4294.png
这里是判断数组是否索引是否越界,如果越界则判断跳转失败,程序如何结构为:
4ec77683bc934cdf84dadb9e8c26b2f1.png
可以看到,这里打印了出错的函数名、行号和错误码,我们可以很容易的定位出错误
(2)出错的时候抛出错误,统一处理:
fad35a72971f4da289678bbc9d593e4b.png
这里我们打开文件或分配内存失败都统一到错误处理当中,而不是直接return返回。这是一种很好的处理方法,不然很容易导致内存泄露或文件未关闭,
从上面我们可以看出,当使用return语句时,文件未打开成功,则返回,而当文件打开成功,而内存申请失败的时候,我们很容易直接返回,而导致
文件未正常关闭。使用了框架后,我们把使用的资源都作一个统一的管理,这样就不会轻易造成资源泄露的问题了,同时也有问题定位打印信息
(3)执行函数是否成功而跳转:
74dadb85ad4b4c6d975ce9e5f6d3cec8.png
当函数执行的返回值不成功时,我们也进行到异常跳转,进行统一处理
以上就是C语言的一些常见的异常处理,当然还有其他的异常处理条件,但是基于以上框架可以很容易的做到。

原文链接:http://www.uptoday.net/articles/2017/11/18/1510981406330.html

没有更多推荐了,返回首页