<setjmp.h>非局部跳转(来自C语言程序设计--现代方法第二版)
2012-05-14 10:52
375 查看
int setjmp(jmp_buf env); void longjmp(jmp_buf env, int val);
<setjmp.h>可以使得一个函数直接跳转到另一个函数,而不需要返回。
setjmp宏“标记”程序中的一个位置;随后可以使用longjmp跳转到该位置。
注意:setjmp会在第一次调用时返回0;随后,longjmp将控制权重新转给最初的setjmp宏调用,而setjmp在这次调用时会返回一个非零值。
例子:
#include <stdio.h> #include <stdlib.h> #include <setjmp.h> jmp_buf env; void f1(void); void f2(void); int main(void) { if ( setjmp(env) == 0) { printf("setjmp returned 0\n"); } else { printf("Program terminates: longjmp called\n"); return 0; } f1(); printf("Program termintaes normally\n"); exit(EXIT_SUCCESS); } void f1(void) { printf("f1 begins\n"); f2(); printf("f1 returns\n"); } void f2(void) { printf("f2 begins\n"); longjmp(env, 1); printf("f2 returns\n"); }
相关文章推荐
- 【C】初学习之错误处理——非局部跳转<setjmp.h>
- C标准库学习之<setjmp.h> ——非局部跳转
- struts2中JSP无法用<jsp:forward page="test.action"> 跳转到对应的 action中解决方法
- NET3.5中的扩展方法,DEMO直接通过IEnumerable<T>来自定义调用过滤方法
- 常用js跳转页面方法大全,onClick,history,location <转载篇>
- 关于<您需要来自S-1-5-21-XXXXXXXXXXX 的权限>的错误解决方法
- C89标准库头文件——非本地跳转<setjmp.h>的应用
- 点击<a href="#">阻止自动跳转到顶部方法
- 控制<a></a>标签不在跳转的方法
- C语言标准库概览详述[5]-跳转<setjmp.h>
- 取消锚(<a/>)点击后页面跳转的几种方法
- js跳转页面方法<转载>
- 点击<a></a>标签时,不进行跳转页面的方法
- 让<a>标签不进行超链接跳转的方法
- Map<String, String> 遍历的四种方法
- 7、利用泛型和反射,让public static <T> T findById(Class<T> clazz, int id)方法,更具一般性
- JS获取URL中参数值(QueryString)的4种方法分享<转>
- <转>云主机配置OpenStack使用spice的方法
- Flex Socket安全策略<policy-file-request/>及应对方法
- Java关于List<String> 进行排序,重写Comparator()方法