需要左值

时间:2013-02-12 18:28:17

标签: c lvalue

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

#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&gt; b?g = a:(g = b); 并且值 b被分配给求解第二个赋值(=)运算符左侧表达式后得到的常量值,这肯定是一个错误。请帮助解决这个问题。

4 个答案:

答案 0 :(得分:2)

条件运算符的结果绝不是C中的左值。

如果没有使用条件表达式的语句进行诊断,则不是C.检查您使用的是C编译器(而不是C ++编译器 - 条件运算符的规则在C ++中是不同的)和ISO模式已启用。

答案 1 :(得分:1)

三元运算符本身就是一个Rvalue。它没有完全控制流程,在给定条件的情况下更多地给出了值。

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

答案 2 :(得分:0)

不要这样做:

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

试试这个:

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

答案 3 :(得分:0)

g=部分移至开头:

g=a>b?a:b;

那会做你想要的......