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++ 语法之间的差异之一。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

您应该在?:运算符的两个执行路径中有表达式,而不是语句。

于 2012-07-25T18:25:34.280 回答