【问题标题】:Eclipse-Photon Ternary Operator Compiling ErrorEclipse-Photon 三元算子编译错误
【发布时间】:2019-01-09 08:34:14
【问题描述】:

该函数应该比较两个整数并在屏幕上打印关系 尽管如此,三元运算符在语法上是正确的,并且已经在 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);
}

【问题讨论】:

  • 欢迎来到stackoverflow。你能正确地格式化你的代码吗?另外请复制并粘贴错误,而不是使用屏幕截图。
  • Visual Studio 及其编译器很乐意让您做许多技术上不允许的事情。
  • 我在格式化时发现,g++ 也允许这样做。共享编译器错误或 C 和 C++ 之间的细微差别,我不知道.. 它有效吗?我不知道。没查。可能需要更多的深入了解。

标签: c compiler-errors ternary-operator


【解决方案1】:

至于为什么会报错,是关于operator precedence的问题。

表达式真的是((x == y) ? c = 61 : (x &gt; y) ? c = 62 : c) = 60。也就是说,您尝试将值 60 分配给表达式 (x == y) ? c = 61 : (x &gt; 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

【讨论】:

  • 感谢您的关心,知道这是一个非常简单的方法,并且我已经尝试过 if-else 模型,我的意图是尝试通过使用三元运算符来节省几行。首先我使用了文字字符“=”,它给了我一个错误,所以我用 ASCI 值替换它,结果证明这不是问题。
  • @AbdelrahmanAhmed “节省行数”是糟糕,并导致难以阅读、理解和维护的混淆代码。无论如何,它不会在生成的代码中为您保存任何内容,它所做的只是让您(以及其他人,包括您自己)头疼。
猜你喜欢
  • 2017-05-12
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
  • 2012-12-18
  • 2014-06-16
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多