以下が C で違法なのはなぜですか?
y = (w + x)++;
私の本によると、これは違法ですが、その理由がわかりません。
ではi++
、 の値がi
変更されています。実行後、i
の値は 1 に以前の値を加えたものになります。ただし、値を に保存することはw+x
できないため、次のいずれも実行できません。これらはすべて (機能する場合) 多かれ少なかれ同じ効果があります。
w+x = w+x+1;
w+x += 1;
(w+x)++;
割り当ての左側に配置できるものは通常、左辺値( lはleft ) と呼ばれます。これを簡潔に言うと、これは++
左辺値にのみ適用できw+x
、左辺値ではありません。この質問とその回答で、左辺値 (およびその他の種類の値) について詳しく読むことができます。
y = x++
変数の増分の値を返しますx
。
y = (x + z)++
(x + z)
は変数ではないため、失敗します。
(w+x)
は正当な左辺の値ではないため、不正です。
左辺の値は、(つまり変数) に割り当てることができる値です。
ポストインクリメントにはl-valueが必要ですが、そうでw+x
はありません。