#include <stdio.h>
void main()
{
int k = 8;
int m = 7;
int z = k < m ? k = m : m++;
printf("%d", z);
k = 8;
m = 7;
z = k < m ? m++ : k=m;
printf("%d", z);
}
输出
Compile Error:
main.c: In function 'main':
main.c:19:32: error: lvalue required as left operand of assignment
z = k < m ? m++ : k=m;
^
- 为什么第一个作业有效而第二个无效?
- 为什么编译器告诉我们需要左值?
最佳答案
由于higher precedence ?:
条件运算符与 =
z = k < m ? m++ : k=m;
等同于(或者说解析为):
z = ((k < m ? m++ : k) = m);
// ^^^^^^^^^^^^^^^^
// expression = m
m
被分配给一个表达式 - Lvalue错误。
关于c - 为什么在使用赋值运算符时,在 else 部分的 if-else 中需要简写左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354906/