setjmp和longjmp
来源:互联网 发布:域名转让都是骗局吗 编辑:程序博客网 时间:2024/05/18 02:18
使用时包含头文件<setjmp.h>
setjmp()和longjmp()的用途,通过操纵过程活动记录实现转移功能。这两个函数协同工作。
setjmp(jmp_buf j)必须首先被调用。它表示“使用变量j记录现在的位置。函数返回零”
longjmp(jmp_buf j,int i)可以接着被调用。表示“回到j所记录的位置,函数返回i,使代码能够知道它是实际上是通过longjmp返回的。”
当使用longjmp()时,j的内容被销毁。
setjmp保存了一份程序的计数器和当前的栈顶指针。也可以保存一些初始值。longjmp恢复这些值,有效的转移控制并把状态重置回保存状态的时候。称作“展开堆栈”,因为你从堆栈中展开过程活动记录,直到取得保存在其中的值。
和goto的区别:
goto语句不能跳出c语言当前的函数。而longjmp可以跳的更远甚至可以跳到其他文件的函数中。
#include <stdio.h>
#include <setjmp.h>
jmp_buf buf;
banana()
{
printf("in banana() \n");
longjmp(buf,1);
printf("you'|| never see this,because i longjmp'd");
}
int main(void)
{
if(setjmp(buf))
printf("back in main\n");
else
{
printf("first time through\n");
banana();
}
}
输出: first time through
in banana()
back in main
- setjmp()和longjmp()
- setjmp和longjmp函数
- setjmp()和longjmp()
- longjmp 和 setjmp
- setjmp和longjmp【转】
- setjmp和longjmp
- c setjmp 和 longjmp
- setjmp和longjmp
- setjmp和longjmp
- setjmp 和 longjmp 函数
- setjmp和longjmp
- setjmp和longjmp函数
- setjmp和longjmp
- C setjmp和longjmp
- setjmp和longjmp
- setjmp和longjmp 再议
- setjmp和longjmp函数
- setjmp和longjmp
- 广度优先搜索求解迷宫问题
- 人人都来写算法 之 快速排序
- mysql通过ssl的方式生成秘钥
- poi 将excel转换为html的java代码
- fflush函数有什么作用?
- setjmp和longjmp
- JS日期函数 加几天 减几天 推后天数日期计算
- 发现一个比较详细的vim介绍
- 快速排序一趟分割,单循环
- 什么是Csrss.exe进程?此进程有何作用?
- java+jsp+struts2实现发送邮件功能
- iPhone-NSAssert使用
- Android---AlarmManager(全局定时器/闹钟)指定时长或以周期形式执行某项操作
- 使用深度技术xp的两条优秀习惯