1

这是我的实验代码:

#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。这是为什么呢?

我也尝试volatileb's 声明中删除;这没什么区别。

4

0 回答 0