Как среда сохраняется с помощью 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
декларация; это не так много разницы.