c语言中的异常处理,setjmp 与 longjmp函数
2016-09-10 13:04
435 查看
最近在看jpeg编解码相关的知识,opencv在jpeg编解码上调用的是libjpeg,于是决定读一读libjpeg的源码,涨一涨姿势水平,发现一些新奇的东西(毕竟菜鸡),记录下来。
c++/java中的异常处理,try catch大家想必都非常了解了,那么c语言中如何实现异常处理呢,c语言提供了setjmp和longjmp两个函数供大家使用,这里简单介绍一下
函数原型如上所示,setjmp 初次调用时会返回0,而longjmp调用时则会调转到setjmp调用的位置(setjmp时由jmp_buf记录堆栈信息,从而longjmp时能找到当时的堆栈位置),并且longjmp指定的第二个参数val会作为调转至setjmp处的返回值
下面看一个简单的例子大家就明白啦:
这是一个java的例子
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)
相关文章推荐
- C语言实现异常处理(使用 setjmp 和 longjmp 函数)
- C语言异常处理机制, setjmp() and longjmp()
- C语言下的setjmp longjmp(C 语言异常处理)
- C语言中一种更优雅的异常处理机制 - setjmp/longjmp
- C语言异常处理之setjmp、longjmp的一个小例程
- C语言中利用setjmp和longjmp做异常处理
- C语言异常处理——setjmp & longjmp
- C语言利用setjmp和longjmp实现异常处理
- 全面了解setjmp与longjmp(C语言异常处理机制)
- C语言中利用setjmp和longjmp做异常处理
- c语言异常处理之longjmp 和 setjmp
- 全面了解setjmp与longjmp(C语言异常处理机制)
- C语言利用setjmp/longjmp实现模仿C++的层次异常处理机制
- C语言错误处理——setjmp & longjmp
- c语言 异常捕捉 setjmp & longjmp
- c语言中的函数间的跳转函数setjmp和longjmp
- C语言中异常处理的两个函数
- UNIX笔记--(longjmp ,setjmp)异常处理
- c语言中的函数间的跳转函数setjmp和longjmp
- C语言的setjmp:异常处理与构建协作式多任务系统