c - 需要左值作为赋值的左操作数 - 错误? : in C

标签 c if-statement conditional-statements lvalue

为什么 a<=20? b=10 : c=30;给出左值错误?

error: lvalue required as left operand of assignment

是因为 b=10 和 c=30 是语句而不是表达式吗?

最佳答案

这是因为条件运算符的优先级高于赋值运算符,表达式被解释为

((a<=20)? (b=10) : c)=30;

条件运算符返回的不是左值(N1570 6.5.15,脚注 110),因此程序将发出编译错误。

您可以使用括号来克服这个优先级问题。

a<=20? (b=10) : (c=30);

使用普通的 if 语句应该更好,除非你有如下原因:

  • 打代码高尔夫
  • 试图让你的程序难以阅读
  • 想要使用从表达式返回的内容
if (a <= 20) {
    b = 10;
} else {
    c = 30;
}

关于c - 需要左值作为赋值的左操作数 - 错误? : in C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38554014/

相关文章:

mysql - 如何通过条件查询(左连接/右连接/内连接/多选,...或)从多表中获取数据

c - 为什么打包不能跨同级 union 或结构工作

c - 如何将八进制转换为十六进制?

java - 用户输入导致错误的 If 语句分支的输出

PHP fatal error : Cannot break/continue

python - 无法解析余数 : '{{' from '{{'

MySQL使用子查询中的表字段作为条件

php - Wordpress:css 中用于 div 背景图像的条件标记?

c - 确定包含的库头文件使用了哪些预处理器定义

c++ - 系统调用 creat 的奇怪行为