的setjmp的(3)文档(我的系统上)使用的setjmp指出在包装功能和局部变量在联机手册重挫
所有可访问对象有值作为时间的longjmp的()函数被调用除了在setjmp()调用和longjmp()调用之间更改的不具有易失性类型且已被更改的自动存储调用持续时间的对象的值不确定。
这是否仅包括在相同的范围,因为在职能范围内调用setjmp
,或者也可以是任何物体了调用堆栈更高功能的对象?
例如,以下代码是否正确?
#include <stdio.h>
#include <setjmp.h>
jmp_buf env;
void function_that_longjmps(void)
{
longjmp(env, 1);
}
int setjmp_wrapper(jmp_buf env)
{
if (setjmp(env) == 0)
return 0;
else
return 1;
}
int main()
{
int i = 0;
if (setjmp_wrapper(env) == 0) {
i = 1;
function_that_longjmps();
}
printf("i = %d\n", i);
return 0;
}
局部变量i
获取setjmp
和longjmp
调用之间修改,但它并没有在setjmp_wrapper
的范围存在。在这种情况下,变量是否有可能被破坏?
尝试'longjmp'到'setjmp_wrapper'已经返回后是未定义的行为本身。 – user2357112