C-使用分配运算符时,为什么在其他部分中需要shorthand if -else中需要lvalue


    #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;
                            ^
  • 为什么第一个任务有效而第二任作用?
  • 为什么编译器告诉需要LVALUE?

由于与=

相比,?:条件操作员的优先级较高
z = k < m ? m++ : k=m;

等于(或说解析为):

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

m分配给一个表达式 - lvalue误差。

阅读C和C 之间的条件操作员差异

相关内容

最新更新