2

我对以下代码有一些问题:

#include<stdio.h>
void main()
{ int a=6,b=2,g;
  a>b?g=a:g=b;
 }

这是正确执行而没有任何错误。但是,如果正确查看,这应该会给出Lvalue Required错误。(a>b?g=a:g)是实际表达式,因为没有括号用作a>b?g=a:(g=b); 并且将值b 分配给求解第二个赋值(=)运算符左侧的表达式后获得的常量值,这肯定是错误的。请就这个话题提供帮助。

4

4 回答 4

2

条件运算符的结果在 C 中永远不是左值。

如果您没有得到带有条件表达式的语句的诊断,则它不是 C。检查您使用的是 C 编译器(而不是 C++ 编译器 - C++ 中条件运算符的规则不同)并且 ISO模式已启用。

于 2013-02-12T18:35:13.993 回答
1

三元运算符本身就是一个右值。它并不完全是控制流,更多的是在给定条件下给出一个值。

要修复,请尝试g = a > b ? a : b.

于 2013-02-12T18:29:53.990 回答
0

不要那样做:

a>b?g=a:g=b;

尝试这个:

g = (a>b)?a:b;
于 2013-02-12T18:30:16.633 回答
0

g=零件移到开头:

g=a>b?a:b;

这会做你想要的......

于 2013-02-12T18:30:23.250 回答