错误:在这个简单的C代码中需要左值?(三元赋值?)
我有:错误:在这个简单的C代码中需要左值?(三元赋值?),c,ternary-operator,conditional-operator,C,Ternary Operator,Conditional Operator,我有: #include<stdio.h> int main() { int a=5,b=6; (a>b)?b=a:b=b; // Here is the error return 0; } 我理解左值是一个可以赋值的值,它与右值有何不同,但为什么附加括号会产生不同。它确实是: ((a>b)?b=a:b)=b; 注意:您只需 b = (a>b)?a:b; 当我们把一个方程放在括号里时,它被当作一个表达式来处理。它返回一些值,为错误提供解决方案。
#include<stdio.h>
int main()
{
int a=5,b=6;
(a>b)?b=a:b=b; // Here is the error
return 0;
}
我理解左值
是一个可以赋值的值,它与右值
有何不同,但为什么附加括号
会产生不同。它确实是:
((a>b)?b=a:b)=b;
注意:您只需
b = (a>b)?a:b;
当我们把一个方程放在括号里时,它被当作一个表达式来处理。它返回一些值,为错误提供解决方案。实际上,在C语言中,这段代码
(a>b)?b=a:b=b;
被许多编译器解析为
((a>b)?b=a:b)=b;
这是一个错误,因为表达式((a>b)?b=a:b)
的计算结果是一个右值,您尝试用b
指定该右值会导致错误。尝试分配右值是一个错误。如果不是这样解析的,那么它只是一个语法错误。但不允许C编译器将其解析为:
((a>b)?b=a:(b=b)); //not allowed to parse by C language
因为C的语法不允许编译器像上面那样解析代码
<>但是你写的(原代码)是正确的,如C+++< /P>
这里C和C++的文法差别很大。由于这种差异,你可以看到两种语言对表达式的处理方式不同。也就是说,C++中的条件表达式与C中的条件表达式不同
Wikipedia为此提供了:
C和C++中的算子绑定 已指定(在相应的 (标准)通过一种考虑因素的语言 语法,而不是优先顺序 桌子这造成了一些微妙的变化 冲突。例如,在C语言中 条件表达式的语法 是:
逻辑还是表达式?表达方式: 条件表达式 在C++中,它是: 逻辑还是表达式?表达方式: 赋值表达式 因此,表达: e=a赋值的优先级低于三元运算符,因此该行的计算结果如下:
((a>b)?b=a:b)=b;
使用:
C和C++不是同一种语言。你的问题是问C.Ya。。。我知道。。但是,在收回my+1的C和C++中,确切的代码表现相同,因为您添加的文本不正确。奇怪,因为你应该知道得更清楚,因为维基百科的解释很好。@Johannes:什么是不正确的?请具体点,谢谢。我修正了一些打字错误,这样我可以再次向上投票(所以说需要修改投票)。-1,不是真的。看到维基百科的解释了吗?对不起,我没有看到,它们显示
e=a
被解析为e=((a
,这似乎与我所写的内容类似。你是说它说不应该被解析的部分吗?
((a>b)?b=a:b)=b;
b=(a>b)?a:b;