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

私の理解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これはあまり違いはありません。

4

0 に答える 0