2010-10-03(Sun) << 2010-10-04(Mon) >> 2010-10-05(Tue)
Top > 2010-10-04

病院

.

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() しても変数の値が破壊されることがなくなる。

Reload   Diff   Front page List of pages Search Recent changes Backup Referer   Help   RSS of recent changes
Last-modified: Mon, 04 Oct 2010 12:58:18 JST (4951d)