- The added line is THIS COLOR.
- The deleted line is THIS COLOR.
- Go to 2010-10-04.
* 病院 [#nc74fc1e]
*. [#qb433780]
- ……と、ある人は言った。
-- http://webcache.googleusercontent.com/search?q=cache:www.issei.org/diary/_20030224/d200010.html
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() しても変数の値が破壊されることがなくなる。