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.\n",value); exit(0); } printf("Calling function.\n"); 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