【发布时间】:2016-07-25 00:11:48
【问题描述】:
为什么a<=20? b=10 : c=30; 给出左值错误?
error: lvalue required as left operand of assignment
是不是因为 b=10 和 c=30 是语句而不是表达式?
【问题讨论】:
标签: c if-statement conditional lvalue
为什么a<=20? b=10 : c=30; 给出左值错误?
error: lvalue required as left operand of assignment
是不是因为 b=10 和 c=30 是语句而不是表达式?
【问题讨论】:
标签: c if-statement conditional lvalue
这是因为条件运算符的优先级高于赋值运算符,表达式被解释为
((a<=20)? (b=10) : c)=30;
条件运算符返回的不是左值(N15706.5.15,脚注 110),因此程序会发出编译错误。
您可以使用括号来解决这个优先级问题。
a<=20? (b=10) : (c=30);
除非您有以下原因,否则使用普通的if 语句应该会更好:
if (a <= 20) {
b = 10;
} else {
c = 30;
}
【讨论】:
您的代码在分配周围缺少括号。
这可以正确编译和运行:
int a = 20, b = -1, c = -1;
a<=20? (b=10) : (c=30);
printf("b=%d, c=%d\n", b, c);
注意:不用说,三元运算符的这种(错误)使用会对代码的可读性产生负面影响,应该避免使用常规的if 语句。
【讨论】: