此文是学习 C专家编程 中的笔记。setjmp和longjmp是C语言所独有的,它们部分弥补了C语言有限的转移能力。函数说明(来自wiki百科):int setjmp(jmp_bufenv)建立本地的jmp_buf缓冲区并且初始化,用于将来跳转回此处。这个子程序保存程序的调用环境于env参数所指的缓...
分类:
其他好文 时间:
2014-07-19 20:09:16
阅读次数:
221
7.1 引言本章将学习:当执行程序时,其main函数是如何被调用的;命令行参数是如何传送给执行程序的;典型的存储器布局是什么样式;如何分配另外的存储空间;进程如何使用环境变量;各种不同的进程终止方式等;另外还将说明longjmp和setjmp函数以及它们与栈的交互作用;还将介绍研究进程的资源限制7....
分类:
其他好文 时间:
2014-07-17 10:07:37
阅读次数:
363
1、setjmp/longjmp属于传统的错误处理
2、setjmp/longjmp是对goto语句的补充,goto智能实现局部跳转,setjmp/longjmp可以实现全局跳转
3、setjmp/longjmp与goto都有缺陷
传统错误处理的3种方式是:
1、设置全局错误状态,标准c中使用errno与perror函数来支持
2、使用标准c库中的信号
3、使用setj...
分类:
其他好文 时间:
2014-06-25 00:31:04
阅读次数:
158
在C中有时我们会使用goto语句用于执行跳转,但是不能跨越函数
#include
void func2()
{
int num = 0;
dst2:
if (num > 0)
{
printf("func1()\n");
func3();
}
if (num == 1)
return;
num++;
goto dst2;
}
void func3()
{
}
...
分类:
其他好文 时间:
2014-06-22 20:46:50
阅读次数:
144
C 语言没有异常处理机制,可以使用setjmp和longjmp进行模拟,另外,goto语句不能在函数间跳转,可以使用setjmp和longjmp完成函数间的跳转。
使用setjmp()函数需要包含头文件
setjmp()函数用于建立本地的jmp_buf缓冲区并初始化,用于将来跳转到这个地方。
longjmp()函数恢复jmp_buf变量所保存的信息,longjmp()之后返回setjmp()...
分类:
其他好文 时间:
2014-06-14 14:19:42
阅读次数:
371
int setjmp(jmp_buf env);
void longjmp(jmp_buf env, int val);
系统跳转函数 ,可以直接在函数之间跳转 (比goto 强大多了)
将上下文 ,就是cpu和内存的信息保存到env中 ,然后调用 longjmp的时候跳转到使用env中的信息 ,恢复上下文 。如果是第一回调用setjmp 它会返回 0,如果从longjmp ...
分类:
其他好文 时间:
2014-05-22 23:52:21
阅读次数:
425
引言:在编写程序时,经常在函数内部使用goto语句来跳转,从而进行出错处理,那么如果想要在函数之间进行跳转该怎么做呢?使用setjmp和longjmp函数。
给出示例程序:
#include
#include
#include
static void f1(int, int, int, int);
static void f2(void);
static jmp_buf jmpbu...
分类:
系统相关 时间:
2014-05-15 02:44:22
阅读次数:
335