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

标签 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);
}

最佳答案

至于为什么你会收到错误,这是关于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 .

关于c - Eclipse-Photon 三元运算符编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51638911/

相关文章:

C++编译错误

c - 在 clang 中,如何使用每个函数的优化属性?

excel - 将共享文件夹路径转换为 ​​UNC 路径

为 vim 创建一个前端

gcc - gcc从stdin读取gnu readline()的编译错误

java - Java 中的三元表达式是如何求值的?

python - 三元运算符的语法错误

javascript - 使用 return 作为三元表达式中的多个语句之一

c++ - 如何避免动态分配内存 C++

c - Valgrind 和 FCGI : How to free all memory correctly after use