您的位置:首页 > 编程语言 > C语言/C++

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

2016-09-10 13:04 435 查看
最近在看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)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: