0
    #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;
                            ^
  • 为什么第一个作业有效而第二个无效?
  • 为什么编译器告诉需要左值?
4

1 回答 1

4

由于条件运算符的优先级高于?:=

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

相当于(或说解析为):

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

m分配给一个表达式,即 - Lvalue error。

阅读C 和 C++ 之间的条件运算符差异

于 2014-01-25T19:05:56.643 回答