Как среда сохраняется с помощью setjmp и восстанавливается с помощью longjmp?

Вот мой экспериментальный код:

#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декларация; это не так много разницы.

0 ответов

Другие вопросы по тегам