0

コンパイラはこのステートメントでエラーを出します。 i>=3?b=10:b=5;

error: lvalue required as left operand of assignment

理由がわからない。使用されているコンパイラはGCCです。

4

3 に答える 3

8

この問題は、演算子の優先順位によって説明されます。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では機能しません。

于 2012-07-25T18:25:55.177 に答える
1

次のようなものを試してください。

b = (i >= 3) ? 10 : 5;
于 2012-07-25T18:26:50.453 に答える
0

?:オペレーターの2つの実行パスには、ステートメントではなく式が含まれているはずです。

于 2012-07-25T18:25:34.280 に答える