Welcome

首页 / 软件开发 / C语言 / C标准库参考指南(8)setjmp.h

C标准库参考指南(8)setjmp.h2013-04-28 柳惊鸿 8. setjmp.h

头文件setjmp用于控制底层调用和函数跳转。

宏:

setjmp();

函数:

longjmp();

变量:

typedef jmp_buf

8.1. 变量和定义

变量jmp_buf是一个数组类型,用于存储setjmp和longjmp信息。

8.2. setjmp

声明:

int setjmp(jmp_buf environment);

存储当前运行环境environment变量中。如果返回一个非零值,则表明longjmp到达了源码中所运行到的位置。否则表明运行环境已被存储。

8.3. longjmp

声明:

void longjmp(jmp_buf environment, int value);

这个函数会使environment恢复调用setjmp时存储的environment值。这个函数时程序掉转到曾调用setjmp处,好像setjmp返回value变量的值一样。变量value的值不回为0。如果传的是0,就用1来代替。如果调用setjmp的函数已经运行终止了,则返回值是不确定的。

实例:

#include<setjmp.h> #include<stdio.h> void some_function(jmp_buf); int main(void) { int value; jmp_buf environment_buffer; value=setjmp(environment_buffer); if(value!=0) { printf("Reached this point from a longjmp with value=%d.
",value); exit(0); } printf("Calling function.
"); some_function(environment_buffer); return 0; } void some_function(jmp_buf env_buf) { longjmp(env_buf,5); }
程序的输出是:

Calling function.Reached this point from a longjmp with value=5.
英文原文:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.8.html

原文作者:Eric Huss

中文译者:柳惊鸿 Poechant

版权声明:本文的原文版权归Eric Huss所有,中文译文版权归Poechant所有。转载请注明来自"柳大的CSDN博客":http://blog.csdn.net/poechant