【C言語】if文内の演算子の優先順位について
【C言語】if文内の演算子の優先順位について
こんにちわ。初めて質問を投稿させて頂きます。
宜しくお願い致します。
【環境】
OS:Windows XP(SP3)
コンパイラ:Visual C++ 6.0
CPU:AMD Athlon X2 4200+
【質問】
私は下記のプログラムを実行しました
---------------------------------
【プログラム】
#include <stdio.h>
int main( void )
{
int i = 1;
int j = 2;
printf( "i = %d\n",i );
printf( "j = %d\n",j );
if( (i = 0) && (j = 200) == 200 ){
printf( "\n(1)-----------------------------\n" );
printf( "i = %d\n",i );
printf( "j = %d\n",j );
}
printf( "\n(2)-----------------------------\n" );
printf( "i = %d\n",i );
printf( "j = %d\n",j );
return 0;
}
【出力結果】
i = 1
j = 2
(2)-----------------------------
i = 0
j = 2 //(※)
---------------------------------
私は【出力結果】(2)のj = 2という出力結果(上記(※)の行)は
j = 200にならないとおかしいと思っております。
なぜなら、私は【プログラム】内のif文「if( (i = 0) && (j = 200) == 200 )」
の判定手順が下記の様になると考えているからです。
(1)i = 0を実行
(2)j = 200を実行
(3)(i = 0)の判定実行
→判定の結果「0」なので&&の右側の判定「(j = 200) == 200」
を行うまでも無くif文全体の判定がFALSE。
しかし、実際は「j = 200」が実行されてないので、上記(2)と(3)の
判定手順が逆転している様に見えます。
C言語の優先順位を見ると「&&」や「==」よりも「()」の方が高いと
記憶してるので、(2)→(3)の順に実行されないとおかしいと思ってます。
しかし、私の予想した結果と実際の出力結果が異なるので私の演算子の優先順位
やif文内での判定手順の理解に間違いがあると考えています。
出来ましたらどの点が間違っているのかご教授願えませんでしょうか?
宜しくお願い申し上げます。
お礼
ありがとうございます。 後置インクリメントですから優先順位は同じなのですが、myclass.(n++) が通らないとのは納得しました。