setjmp 与 longjmp解析
来源:互联网 发布:淘宝店卖衣服去哪进货 编辑:程序博客网 时间:2024/05/21 08:38
setjmp 与 longjmp 提供了C语言中跳转的功能 以下是函数原型
int setjmp(jmp_buf env)
void longjmp(jmp_buf env, int value)
setjmp env 用来建立本地缓冲区并且初始化,用于将来跳转回此处。env
将被longjmp
使用。如果是从setjmp
直接调用返回,setjmp
返回值为0。如果是从longjmp
恢复的程序调用环境返回,setjmp
返回非零值。
longjmp 恢复env
所指的缓冲区中的程序调用环境上下文,env
所指缓冲区的内容是由setjmp
子程序调用所保存。value
的值从longjmp
传递给setjmp
。longjmp
完成后,程序从对应的setjmp
调用处继续执行,如同setjmp
调用刚刚完成。如果value
传递给longjmp
零值,setjmp
的返回值为1;否则,setjmp
的返回值为value
。
#include <stdio.h>#include <setjmp.h>jmp_buf buf;void test_set_jmp(){ printf("Now enter test_set_jmp()\n"); longjmp(buf,1); printf("you'll never see this, because longjmp has jump to another");}int main(int argc, char *argv){ if(setjmp(buf)) printf("Now I am back into main\n"); else{ printf("Now Im here, first time in main()\n"); test_set_jmp(); } return 0;}
输出结果:
ivanx@ivanx-V:~/test$ ./a.out
Now Im here, first time in main()
Now enter test_set_jmp()
Now I am back into main
可以看出,第一次记录了跳转位置,这样 test_set_jmp 中调用了 longjmp,函数末尾的打印不会被执行。
0 0
- setjmp 与 longjmp解析
- setjmp和longjmp解析
- setjmp 与longjmp
- setjmp与longjmp
- setjmp 与 longjmp
- setjmp与longjmp
- setjmp 与 longjmp
- setjmp 与 longjmp
- 浅谈setjmp与longjmp
- 浅谈setjmp与longjmp
- setjmp与longjmp
- setjmp与longjmp
- setjmp 与 longjmp
- setjmp与longjmp
- setjmp与longjmp
- setjmp 与 longjmp
- setjmp与longjmp
- setjmp()与longjmp()
- VC++例说Windows窗口、视口以及GDI映射模式
- 面试技巧
- 判断转换后的字符串是不是实数
- mode_t 内核文件权限值 S_IRUGO=S_IRUSR | S_IRGRP | S_IROTH
- Java I/O系统----------- 标准I/O
- setjmp 与 longjmp解析
- C#:代表(delegate)和事件(event) (转)
- java中提高代码效率避免OOM的几点注意的地方
- 获取本地IP gethostname和gethostbyname
- redhat 安装nexus-2.11.3-01
- Hash字符串常见用法总结 (HDU 1800 or map)
- win8 64位+Oracle 11g 64位下使用PL/SQL Developer 的解决办法
- Linux下分区详解之-Parted
- jfinal缓存EhCache