int i; i = 1; i = 2; printf( "i = %d", i ); みたいなことをやると 当然 i の表示は 2となります。 最適化とは 途中の i = 1; は次に書き換えられるので 無駄と判断して i = 1; をコンパイラが気を利かせて勝手にカットしてしまう というのがコンパイラの最適化なワケなのですが、このお節介な最適化も時々ハマり込むワナになってます。 i = 1; i = 2; printf( "i = %d", i ); こういう変数への入力は パソコンソフトなどの場合だと どう見ても途中はムダに見えますが、、 これは組み込みマイコンになると PORTA = 1; PORTA = 2; というのには意味があったりします。( PORTは通常最適化防止になっているけれど) ポートAの BIT0 を HIGHに 次は ポートAの BIT1 を HIGHに