これが私の実験コードです:
#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これはあまり違いはありません。