Eclipse-Photon三元运算符编译错误

时间:2018-08-01 17:16:02

标签: c compiler-errors ternary-operator

该函数应比较两个整数并在屏幕上打印关系 算法,三元运算符的语法正确,并且已经在Visual Studio IDE上运行,使用gcc编译时,eclipse出现了错误:

error: lvalue required as left operand of assignment
     (x == y) ? c = 61 : (x > y) ? c = 62 : c = 60;
                                              ^

代码:

#include <stdio.h>

void _1_6(const int x, const int y)
{
    char c = '\0';
    (x == y) ? c = 61 : (x > y) ? c = 62 : c = 60;
    printf("%d%c%d", x, c, y);
}

int main(void)
{
    _1_6(1, 3);
}

1 个答案:

答案 0 :(得分:1)

关于为什么出现错误,这是关于operator precedence的问题。

表达式实际上是((x == y) ? c = 61 : (x > y) ? c = 62 : c) = 60。也就是说,您尝试将值60分配给表达式(x == y) ? c = 61 : (x > y) ? c = 62 : c,这是不可能的。

您需要自己添加一些括号,例如

(x == y) ? c = 61 : (x > y) ? c = 62 : (c = 60);  // Note parentheses around last assignment

或将其返工为例如

c = (x == y ? '=' : x > y ? '>' : '<');

或者,这是我的建议,不要再使用混淆代码,而要使用简单易读的代码:

if (x == y)
    c = '=';
else if (x > y)
    c = '>';
else
    c = '<';

还请注意使用实际字符值,而不是magic numbers