这是我的实验代码:
#include <setjmp.h>
#include <stdio.h>
static jmp_buf buf;
int main()
{
volatile int b = 3;
if (setjmp(buf) != 0) {
printf("%d\n", b);
return 0;
}
b = 5;
longjmp(buf, 1);
}
我对代码的理解setjmp
并将longjmp
其呈现为:
int main()
{
volatile int b = 3;
setjmp(buf); /* the env is saved and b's value is 3 in that env */
b = 5;
longjmp(buf, 1); /* the saved env is restored and b is 3, not 5 */
printf("%d\n", b);
return 0;
}
所以,在我的计数中,输出值为 3。但它实际上是 5。这是为什么呢?
我也尝试volatile
从b
's 声明中删除;这没什么区别。