以下が 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はありません。