【问题标题】:Compile time error as 'lvalue required' but not sure why [duplicate]编译时错误为“需要左值”,但不知道为什么[重复]
【发布时间】:2023-03-16 13:35:01
【问题描述】:

此代码会引发需要左值的编译时错误。

#include <stdio.h>

void main()
{
    int k = 8;
    int m = 7;
    k < m ? k++ : m = k;
    printf("%d", k);
}

【问题讨论】:

  • clang 相对于三元运算符中的m = k 表示error: expression is not assignable
  • 你想用k &lt; m ? k++ : m = k;做什么?
  • 三元运算符不是if的替代品。

标签: c


【解决方案1】:

三元运算符的优先级高于赋值,这就是为什么你的代码等于(k &lt; m ? k++ : m) = k;。你的编译器说括号中的值是不可赋值的。

你想做的是:

#include <stdio.h>

void main()
{
    int k = 8;
    int m = 7;
    k < m ? k++ : (m = k);
    printf("%d", k);
}

【讨论】:

    【解决方案2】:

    问题出在这里:

    k < m ? k++ : m = k;
    

    对于您想要分配值的构造,但您没有。我猜你想要这样的东西:

       k =  (k < m) ? k+1 : m;
    

    现在您将根据条件k &lt; mk 分配一个值

    如果 (k k = k+1
    否则 -> k = m

    【讨论】:

    • 不是k = k++UB吗?
    • 我不确定???更好的 k+1?
    • 是的,k+1 没问题。
    • 好的,谢谢。我编辑答案
    猜你喜欢
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 1970-01-01
    相关资源
    最近更新 更多