<setjmp.h>
章节大纲
-
<setjmp.h>
– 非局部跳转(Non-Local Jumps)标准 C 要求
jmp_buf
是一个足够大小的数组,用于存储“当前程序上下文”(不管具体包含什么)。
C99 补充说明:该上下文不包括浮点状态标志的状态、已打开的文件、或抽象机器的任何其他组件的状态。C++ 注意事项:对应的标准 C++ 头文件为
<csetjmp>
。
保存调用环境(Save Calling Environment)
setjmp
宏标准 C 规定:“不指定
setjmp
是宏还是具有外部链接的标识符(函数)。
如果为了访问实际函数而屏蔽了宏定义,或程序自行定义了名为setjmp
的外部标识符,行为是未定义的。”如果在标准 C 所定义的上下文之外调用
setjmp
,其行为也是未定义的。
恢复调用环境(Restore Calling Environment)
longjmp
函数-
如果
longjmp
尝试恢复到一个从未由setjmp
保存过的上下文,其结果是未定义的。 -
如果
longjmp
恢复到的上下文中,其最初调用setjmp
的函数已经结束返回,其结果也是未定义的。 -
如果在嵌套的信号处理程序中调用
longjmp
,行为是未定义的。 -
不要在退出处理程序中调用
longjmp
,例如那些通过atexit
注册的处理函数中。
-