linux下如何实现全局跳转
2016-04-29 18:20
555 查看
C语言中的goto语句只能实现函数中的局部跳转,并不能实现全局跳转
查阅LinuxC 以后,简介如何实现及运用全局跳转(不同函数中的跳转)
Linux 下的全局跳转的实现及其原理:
所用的函数及其头文件:
<setjmp.h>
setjmp();
longjmp()
在linux下的例子程序:
this is before the function setjmp()
read to jump
after long jump,the value is 10
val=0
原理:
setjmp(env)函数把其所在的函数的栈帧保存在其jmp_buf类型的参数env中;
longjmp(env,10) longjmp 函数把env储存的栈帧恢复,并跳转到setjmp函数中,setjmp函数返回参数值10。
使用方法:
注意:再次使用setjmp()第一次储存栈帧返回值为0
查阅LinuxC 以后,简介如何实现及运用全局跳转(不同函数中的跳转)
Linux 下的全局跳转的实现及其原理:
所用的函数及其头文件:
<setjmp.h>
setjmp();
longjmp()
在linux下的例子程序:
#include<stdio.h> 2 #include<setjmp.h> 3 jmp_buf env;//储存栈帧 4 void f(void) - 5 { | 6 longjmp(env,10);//恢复env所保存的栈帧,longjmp参数的值作为setjmp的返回值 | 7 printf("this is after the function longjmp");//不执行该程序 | 8 } 9 10 int main() - 11 { | 12 int val; | 13 printf("this is before the function setjmp()\n"); | 14 val=setjmp(env);//进入setjmp函数,第一次进入功能是把当前函数栈帧保存在env中,当longjmp()返回 | 时仍在setjmp内部,返回longjmp中参数的值 | 15 if(val!=0)//第一次进入,即还没有跳转 |- 16 { || 17 printf("after long jump,the value is %d\n",val); || 18 }else//跳转后的 |- 19 { || 20 printf("read to jump\n"); || 21 f(); || 22 } | 23 val=setjmp(env); | 24 printf("val=%d\n",val); | 25 return 0; | 26 }运行结果:
this is before the function setjmp()
read to jump
after long jump,the value is 10
val=0
原理:
setjmp(env)函数把其所在的函数的栈帧保存在其jmp_buf类型的参数env中;
longjmp(env,10) longjmp 函数把env储存的栈帧恢复,并跳转到setjmp函数中,setjmp函数返回参数值10。
使用方法:
#include<stdio.h> #include<string.h> #include<setjmp.h> jmp_buf env; void f(void) { longjmp(env,1); } int main() { if() setjmp(env); return 0; }
注意:再次使用setjmp()第一次储存栈帧返回值为0
相关文章推荐
- linux 修改端口限制
- Linux下adb devices : no permissions解决方案
- Linux完全卸载Mysql的方法
- Linux下如何防止僵尸进程的出现
- Linux查看程序端口占用情况
- 如何在Linux中查看所有正在运行的进程
- Linux中断处理杂记
- Linux下*.tar.gz文件解压缩命令
- 忘记root密码怎么办?
- 2016年Linux兴趣小组免试题Level_5及Level_End详解
- 你需要知道的16个Linux服务器监控命令
- 挂在磁盘到centos7 并设置开机启动
- linux下利用nohup后台运行jar文件包程序
- centOS7上部署安装coreseek及遇到的问题处理
- linux下的几个归档和压缩工具
- CentOS 7 中,创建桌面快捷方式
- Centos6.7安装配置vsftpd虚拟用户
- 聊聊 Linux 中的五种 IO 模型
- Linux内核的动态电压和电流控制接口(regulator&dvfs)
- linux图形界面基本知识(X、X11、Xfree86、Xorg、GNOME、KDE其间的关系)