- 追加された行はこの色です。
- 削除された行はこの色です。
- 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() しても変数の値が破壊されることがなくなる。