嗨,我想问一下 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 将存储环境数据,所以跳转函数将在它的原始调用后返回......我很困惑。谢谢您的回复 :)