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;
                            ^
  • 最初の割り当てが機能し、2 番目の割り当てが機能しないのはなぜですか?
  • そして、なぜコンパイラは左辺値が必要であると言うのですか?
4

1 に答える 1

4

に比べて条件演算子の優先順位が高いため?:=

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

と同等です (または parse as と言います):

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

m次の式に割り当てられます -左辺値エラー。

C と C++ の条件演算子の違いを読む

于 2014-01-25T19:05:56.643 に答える