【发布时间】:2020-11-03 16:52:24
【问题描述】:
#include <setjmp.h>
#include <stdio.h>
jmp_buf jmp;
int test() {
setjmp(jmp);
puts("Birds are crying");
return 0;
}
int main() {
longjmp(jmp,1);
return 0;
}
上面的代码不起作用并崩溃,为什么?
我在 Windows 10 Pro 上使用 GCC 编译器。
【问题讨论】:
-
您必须创建一个非本地跳转的上下文。因此,必须先调用 setjmp()。
-
顺便说一句,longjmp 进入函数的目的是什么?
-
@Jabberwocky 教育,我猜。
-
@MarcoBonelli 是的,也许是为了展示未定义行为的表现。
-
如果您真的想实现这样的目标,我建议您研究(非常小心)使用
makecontext/getcontext/swapcontext/@ 987654325@.