这是我的实验代码:
#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
;这并没有多少差异。