为什么这个陈述会出错?

时间:2012-07-25 18:23:21

标签: c

编译器在此语句中给出错误。 i>=3?b=10:b=5;

error: lvalue required as left operand of assignment

无法弄清楚原因。正在使用的编译器是GCC。

3 个答案:

答案 0 :(得分: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 ++语法之间的差异之一。在C ++中,即使没有明确的大括号,您的原始语句也会被解释为i >= 3 ? (b = 10) : (b = 5)。最重要的是,在C ++中?:的结果可以是左值。

换句话说,在C ++中,您的原始语句将“按预期”编译和工作,但不会在C中编译。

答案 1 :(得分:1)

尝试更多类似的内容:

b = (i >= 3) ? 10 : 5;

答案 2 :(得分:0)

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