【发布时间】:2014-01-07 18:21:39
【问题描述】:
您好,我想问一下关于 setjmp/longjmp 的问题。我试图搜索,但我没有成功......
#include <stdio.h>
#include <setjmp.h>
jmp_buf a, b;
void jump() {
int aa = setjmp(a);
if (aa)
{
printf("Jump!\n");
}
else
{
longjmp(b, 1);
printf("Should not happened...\n");
}
printf("End of function!\n");
}
int main(int argc, char** argv) {
int bb = setjmp(b);
if (bb)
{
longjmp(a, 1);
printf("Should not happened...\n");
}
else
{
jump();
printf("What here?\n");
}
printf("Exit\n");
return 0;
}
问题是,在 jump() 中的最后一个 printf 之后会发生什么...我尝试了这段代码,它变成了无限循环。为什么?我虽然 setjmp 将存储环境数据,所以跳转函数将在它的原始调用后返回......我很困惑。谢谢回复:)
【问题讨论】: