質問: ++c); } 私の処理系のccでコンパイルして実行すると 1 1 と出力されます. 上の二つの条件式が両方とも真であると解釈され得るような評価順序が存在するのでしょうか?
回答: windows系での結果です。 microsoft visual c++6.0(32bit)と1.51(16bit)で検証し両方で何の警告も無く「1を2つ」出力しました。 16bitコンパイラで生成されたコードは 上の式: movword ptr -4[bp],offset 0 ; c=0 movax,word ptr -4[bp] ; addax,offset 1 ; c+1→ax addword ptr -4[bp],offset 1 movcx,word ptr -4[bp] ; ++c→cx cmpax,cx ; 比較 下の式: movword ptr -4[bp],offset 0 ; c=0 addword ptr -4[bp],offset 1 ; ++c movax,word ptr -4[bp] ; c→ax cmpword ptr -4[bp],ax ; 比較 上の式と下の式では評価順が違うようです。