0.背景 在看APUE第七章的时候,作者分析了setjmp和longjmp这种函数间跳转机制对不同存储类型变量的影响,看到register,auto,volatile,static等等这些关键字很模糊,也可能太少用了,但是自认为C语言基础不错的我还是不能接受任何不懂的知识点,于是就捋了捋思路。1.....
分类:
编程语言 时间:
2014-10-09 02:50:17
阅读次数:
165
程序中通常会出现三种错误:用户错误、运行期错误以及异常标准库函数setjmp和longjmp在C语言中,标准库函数setjmp和longjmp形成了结构化异常工具的基础。简单的说就是setjmp实例化处理程序,而longjmp产生异常setjmp和longjmp是C语言所独有的,它们部分弥补了C语言...
分类:
编程语言 时间:
2014-09-24 23:50:48
阅读次数:
389
前不久在阅读Quake3源代码的时候,看到一个陌生的函数:setjmp,一番google和查询后,觉得有必要针对setjmp和longjmp这对函数写一篇blog,总结一下。setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序员的预先设计的意...
分类:
编程语言 时间:
2014-07-28 14:36:23
阅读次数:
238
此文是学习 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