病院.
int i = 0; // レジスタ %x に割り当て if (setjmp(jmp_env) == 0) // %x を含むレジスタを jmp_env に退避 { i++; // %x <- %x + 1 longjmp(jmp_env, 1); // %x を含むレジスタを jmp_env から復元 // して、ブロックから抜ける } printf("i = %d\n", i); // %x の値は 0 のまま 解決策は変数を volatile 宣言すること。これで変数の値をレジスタにキャッシュせず、 毎回メモリを参照するようになるので、longjmp() しても変数の値が破壊されることがなくなる。 |