C标准库参考指南(8)setjmp.h

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

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索函数
, 变量
, jmp
, environment
, value
, setjmp
longjmp
spring boot参考指南、xmpp协议中文参考指南、指南的参考文献格式、css3中文参考指南、abaqus关键词参考指南,以便于您获取更多的相关知识。

时间: 2024-08-08 06:10:51

C标准库参考指南(8)setjmp.h的相关文章

C标准库参考指南(1)assert.h

1.1 assert.h 断言头文件用于调试. 宏: assert(); 外部引用: NDEBUG 1.1. assert 声明: void assert(intexpression); 断言头文件中的宏允许你将一些特殊信息写入到标准错误文件. 如果表达式的值为0(false),那么表达式.源文件名和行号都会被发送给标准错误输出,并调用abort函数.如果标识符NDEBUG ("no debug")由#define NDEBUG定义,那么断言头文件中的宏就什么都不做. 标准错误输出的格

C标准库参考指南(11)stddef.h

11. stddef.h 头文件stddef提供了一些标准定义.其中很多定义也会出现在其他头文件中. 宏: NULL offsetof(); 类型: typedef ptrdiff_t typedef size_t typedef wchar_t 11.1. 变量和定义 ptrdiff_t是相减两个指针的结果. size_t是无符号整型. wchar_t是一个具有宽字符常量大小的整型. NULL是空指针常量值. offsetof(type, member-designator) 他会产生一个si

C标准库参考指南(10)stdarg.h

10. stdarg.h stdarg头文件定义了当函数参数个数位置时用于获取参数的宏. 宏: va_start(); va_arg(); va_end(); 类型: typedef va_list 10.1. 变量和定义 va_list适用于进入带有stdarg宏的函数的参数的类型. 一个带有不确定个数参数的函数,用(,...)在参数列表的末尾来标示. 10.2. va_start 声明 : void va_start(va_list ap, last_arg); 初始化与va_arg和va_

C标准库参考指南(12)stdio.h(A)

12. stdio.h 标准输入输出头文件提供用于输入和输出的函数. 宏: NULL _IOFBF _IOLBF _IONBF BUFSIZ EOF FOPEN_MAX FILENAME_MAX L_tmpnam SEEK_CUR SEEK_END SEEK_SET TMP_MAX stderr stdin stdout 函数: clearerr(); fclose(); feof(); ferror(); fflush(); fgetpos(); fopen(); fread(); freop

C标准库参考指南(9)signal.h

9. signal.h 头文件signal处理程序运行时产生的信号的方法. 宏: SIG_DFL SIG_ERR SIG_IGN SIGABRT SIGFPE SIGILL SIGINT SIGSEGV SIGTERM 函数: signal(); raise(); 变量: typedef sig_atomic_t 9.1. 变量和定义 类型sig_atomic_t就是int,作为signal函数的handler中的变量.SIG_宏用于signal函数中用于定义信号函数. SIG_DFL   默认

C标准库参考指南(7)math.h

7. math.h 数学头文件定义了很多数学函数. 宏: HUGE_VAL 函数: acos(); asin(); atan(); atan2(); ceil(); cos(); cosh(); exp(); fabs(); floor(); fmod(); frexp(); ldexp(); log(); log10(); modf(); pow(); sin(); sinh(); sqrt(); tan(); tanh(); 7.1.错误条件 所有math.h函数产生错误的情形都是类似的.

C标准库参考指南(6)locale.h

6. locale.h 头文件locale对设置具体位置信息很有用. 变量: struct lconv 宏: NULL LC_ALL LC_COLLATE LC_CTYPE LC_MONETARY LC_NUMERIC LC_TIME 函数: localeconv(); setlocale(); 6.1. Variables and Definitions 数据结构"lconv"包含下面这些成员变量.这个数据结构的使用,将在"6.3 localeconv"中描述.

C标准库参考指南(5)limits.h

5. limits.h 该头文件定义了变量类型的特点. 5.1. Defined Values 下面这些值由#define指令定义.这些值由实现所确定,但一般不会比下面给出的值小. 英文原文:http://www.acm.uiuc.edu/webmonkeys/book/c_guide/2.5.html 原文作者:Eric Huss 中文译者:柳惊鸿 Poechant 版权声明:本文的原文版权归Eric Huss所有,中文译文版权归Poechant所有.转载请注明来自"柳大的CSDN博客&quo

C标准库参考指南(4)float.h

4. float.h 浮点数头文件定义了一个浮点数值的上下限. 4.1. Defined Values 浮点数以下面的方式定义. sign value E exponent 其中sign是正号或者负号,value是数值,exponent是指数. 下面这些宏值由#define定义.这些值是由具体运行的平台环境特定实现,但不会比这里所给出的值小.注意在所有的宏名中,FLT是浮点类型的缩写,DBL是double的缩写,LDBL是long double缩写. 英文原文:http://www.acm.ui