c - 为什么在使用赋值运算符时,在 else 部分的 if-else 中需要简写左值?

标签 c shorthand-if

    #include <stdio.h>

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

        k = 8;
        m = 7;
        z = k < m ? m++ : k=m;
        printf("%d", z);
    }

输出

Compile Error:
main.c: In function 'main':
main.c:19:32: error: lvalue required as left operand of assignment
         z = k < m ? m++ : k=m;
                            ^
  • 为什么第一个作业有效而第二个无效?
  • 为什么编译器告诉我们需要左值?

最佳答案

由于higher precedence ?: 条件运算符与 =

的比较
z = k < m ? m++ : k=m;

等同于(或者说解析为):

z = ((k < m ? m++ : k) = m);
//    ^^^^^^^^^^^^^^^^            
//    expression       = m 

m 被分配给一个表达式 - Lvalue错误。

阅读Conditional operator differences between C and C++

关于c - 为什么在使用赋值运算符时,在 else 部分的 if-else 中需要简写左值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21354906/

相关文章:

php - 不确定 a 的值是多少

php - 嵌套简写如果

c字符串标记化问题

c - 向标准 C 语法添加关键字

c - 在 "C Programming: A modern Approach"中练习

php - 转换变量时的三元运算符

需要 JavaScript 设计模式帮助 : Loose Augmentation of Modules

c - 将 C 文件作为 Windows 服务运行

c# - 是否可以使用 Bind 构建我自己的 DDNS?

javascript简写语法