コンパイラはこのステートメントでエラーを出します。
i>=3?b=10:b=5;
error: lvalue required as left operand of assignment
理由がわからない。使用されているコンパイラはGCCです。
コンパイラはこのステートメントでエラーを出します。
i>=3?b=10:b=5;
error: lvalue required as left operand of assignment
理由がわからない。使用されているコンパイラはGCCです。
この問題は、演算子の優先順位によって説明されます。C文法に従ってあなたの
i >= 3 ? b = 10 : b = 5;
Cコンパイラによって次のように解釈されます
(i >= 3 ? b = 10 : b) = 5;
まず、これはおそらくあなたが意図したものではありません。第二に、C言語では、?:
演算子の結果は左辺値ではありません。何も割り当てることはできません。したがって、エラーメッセージ。
問題を修正するには(私があなたの意図を正しく理解していると仮定して)、中かっこを使用する必要があります
i >= 3 ? (b = 10) : (b = 5);
または単に従来の方法で書き直します
b = i >= 3 ? 10 : 5;
ちなみに、これはCとC++の文法の違いの1つです。i >= 3 ? (b = 10) : (b = 5)
C ++では、元のステートメントは明示的な中括弧がなくても解釈されます。その上、C ++では、の結果は?:
左辺値になる可能性があります。
つまり、C ++では、元のステートメントは「意図したとおりに」コンパイルおよび機能しますが、Cでは機能しません。
次のようなものを試してください。
b = (i >= 3) ? 10 : 5;
?:
オペレーターの2つの実行パスには、ステートメントではなく式が含まれているはずです。