c语言 - 条件运算符中的"error: lvalue required as left operand of assignment"



我是C的新手,今天我学习了"?"运算符,这是if-else语句的简短类型。但是,当我执行这段代码时:

int b;
int x;
b=3<2?x=12:x=34;

我得到一个错误"error:左值需要作为赋值的左操作数"。我不明白为什么会这样。在我看来,程序首先将34赋值给x,然后将x的值,也就是34赋值给b。另一方面,我可以使用语句

int b;
int x;
b=3<2?x=12:(x=34);

没有任何错误。我看了看我的书,但没有任何帮助。为什么我不能用第一个表述?我的电脑要做什么?谢谢…

+1是一个有趣的问题——它突出了c++和C之间的两个区别。

(1) C和c++中三元表达式的求值规则不同

c++解析如下

logical-OR-expression ? expression : assignment-expression

因此,它通过匹配assignment-expressionx=34来解析您的语句

b = 3<2 ? x = 12 : (x = 34);

但是C解析成这样

logical-OR-expression ? expression : conditional-expression 

x = 34不是conditional-expression,所以你的语句被解析为

b = (3<2 ? x = 12 : x) = 34;

(2) c++中的条件运算符可以返回lvalue,而C不能。因此,以下语句在c++中是合法的,但在C中不合法:

b = (3<2 ? x = 12 : x) = 34;

在ideone.com上为C和c++编译器验证。请参阅以下链接在c中使用三元运算符的错误,因为c和c++的三元运算符不同

C与c++在左值规则中差异的条件运算符差异

相关内容

最新更新