【问题标题】:lvalue required as left operand of assignment -error in ?: in C左值需要作为赋值的左操作数 - 错误?:在 C 中
【发布时间】:2016-07-25 00:11:48
【问题描述】:

为什么a<=20? b=10 : c=30; 给出左值错误?

error: lvalue required as left operand of assignment

是不是因为 b=10 和 c=30 是语句而不是表达式?

【问题讨论】:

    标签: c if-statement conditional lvalue


    【解决方案1】:

    这是因为条件运算符的优先级高于赋值运算符,表达式被解释为

    ((a<=20)? (b=10) : c)=30;
    

    条件运算符返回的不是左值(N15706.5.15,脚注 110),因此程序会发出编译错误。

    您可以使用括号来解决这个优先级问题。

    a<=20? (b=10) : (c=30);
    

    除非您有以下原因,否则使用普通的if 语句应该会更好:

    • 打代码高尔夫
    • 试图让您的程序难以阅读
    • 想要使用从表达式返回的内容
    if (a <= 20) {
        b = 10;
    } else {
        c = 30;
    }
    

    【讨论】:

      【解决方案2】:

      您的代码在分配周围缺少括号。

      这可以正确编译和运行:

      int a = 20, b = -1, c = -1;
      a<=20? (b=10) : (c=30);
      printf("b=%d, c=%d\n", b, c);
      

      Demo.

      注意:不用说,三元运算符的这种(错误)使用会对代码的可读性产生负面影响,应该避免使用常规的if 语句。

      【讨论】:

        猜你喜欢
        • 2017-01-10
        • 1970-01-01
        • 2011-12-20
        • 2011-03-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多