c语言中的异常处理,setjmp 与 longjmp函数

来源:互联网 发布:网络人脸搜索网站 编辑:程序博客网 时间:2024/05/21 06:21

最近在看jpeg编解码相关的知识,opencv在jpeg编解码上调用的是libjpeg,于是决定读一读libjpeg的源码,涨一涨姿势水平,发现一些新奇的东西(毕竟菜鸡),记录下来。

c++/java中的异常处理,try catch大家想必都非常了解了,那么c语言中如何实现异常处理呢,c语言提供了setjmp和longjmp两个函数供大家使用,这里简单介绍一下

int setjmp(jmp_buf envbuf);void longjmp(jmp_buf envbuf, int val);

函数原型如上所示,setjmp 初次调用时会返回0,而longjmp调用时则会调转到setjmp调用的位置(setjmp时由jmp_buf记录堆栈信息,从而longjmp时能找到当时的堆栈位置),并且longjmp指定的第二个参数val会作为调转至setjmp处的返回值

下面看一个简单的例子大家就明白啦:

这是一个java的例子

try {    doLogic();} catch(Excpetion1 e) {    doError1();} catch(Excpetion2 e) {    doError2();} 
那么c如何实现呢

jmp_buf buf;int error_code = setjmp(buf);if(error_code == 1) {    doError1();}else if(error_code == 2) {    doError2();}doLogic();//如果内部出错则调用longjmp(buf, error_code)


0 0
原创粉丝点击