如何通过setjmp保存环境并通过longjmp恢复?

时间:2014-08-17 00:22:06

标签: c longjmp setjmp

这是我的实验代码:

#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);
}

我对setjmplongjmp的理解将代码转换为:

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;这并没有多少差异。

0 个答案:

没有答案