setjmp和longjmp 转来的
来源:互联网 发布:redis java 教程 编辑:程序博客网 时间:2024/06/04 20:04
int setjmp(jmp_buf envbuf)
宏函数setjmp()在缓冲区envbuf中保存系统堆栈里的内容,供longjmp()以后使用,setjmp()必须使用头文件setjmp.h。
调用setjmp()宏时,返回值为0,然而longjmp()把一个变原传递给setjmp(),该值(恒不为0)就是调用longjmp()后出现的setjmp()的值。
setjmp 函数用于保存程序的运行时的堆栈环境,接下来的其它地方,你可以通过调用longjmp函数来恢复先前被保存的程序堆栈环境。当setjmp和 longjmp组合一起使用时,它们能提供一种在程序中实现“非本地局部跳转”("non-local goto")的机制。并且这种机制常常被用于来实现,把程序的控制流传递到错误处理模块之中;或者程序中不采用正常的返回(return)语句,或函数的正常调用等方法,而使程序能被恢复到先前的一个调用例程(也即函数)中。
对setjmp函数的调用时,会保存程序当前的堆栈环境到env参数中;接下来调用longjmp时,会根据这个曾经保存的变量来恢复先前的环境,并且当前的程序控制流,会因此而返回到先前调用setjmp时的程序执行点。此时,在接下来的控制流的例程中,所能访问的所有的变量(除寄存器类型的变量以外),包含了longjmp函数调用时,所拥有的变量。
如何实现异常处理
首先设置一个跳转点(setjmp() 函数可以实现这一功能),然后在其后的代码中任意地方调用 longjmp() 跳转回这个跳转点上,以此来实现当发生异常时,转到处理异常的程序上,在其后的介绍中将介绍如何实现。 setjmp() 为跳转返回保存现场并为异常提供处理程序,longjmp() 则进行跳转(抛出异常),setjmp() 与 longjmp() 可以在函数间进行跳转,这就像一个全局的 goto 语句,可以跨函数跳转。
jmp_buf 异常结构
setjmp() 与 longjmp() 函数都使用了 jmp_buf 结构作为形参,它们的调用关系是这样的:
- setjmp和longjmp 转来的
- setjmp和longjmp【转】
- setjmp和longjmp的用法
- setjmp和longjmp的使用
- setjmp和longjmp的使用
- setjmp和longjmp的用法
- setjmp和longjmp的使用
- setjmp和longjmp的用法
- setjmp和longjmp的使用
- setjmp和longjmp 的理解
- c语言的setjmp和longjmp
- Linux下的setjmp和longjmp
- setjmp和longjmp的"非本地跳转"
- 关于setjmp和longjmp的使用
- 关于c里面的setjmp和longjmp
- setjmp()/longjmp()的使用方法和场合
- setjmp 和 longjmp函数的使用
- setjmp和longjmp的"非本地跳转"
- 选择保存文件路径的对话框
- chm文件下载后打不开的原因以及解决办法
- 父子页面通讯
- iOS动画效果和实现
- 句法分析
- setjmp和longjmp 转来的
- 千里之行,始于足下(开篇随笔)
- JS Enter回车事件
- NMOS基本逻辑电路分析
- GCD介绍(一): 基本概念和Dispatch Queue
- 对技术的态度
- Android TextView文字横向自动滚动(跑马灯)
- 数组和指针的一些小知识
- Java排序算法