4

GCCコンパイラで与えられたプログラムをコンパイルすることについて:

int main()  
{  
      int a=2,b=3;  
      (a>1)?b=10:b=50;  
      printf("%d",b);  
      return 0;     
}


「左オペランドとして左辺値が必要」 というエラーが表示されています
が、4行目を

(a>1)?b=10:(b=50);

Thenと書くと、コンパイルエラーは表示されません。誰かが私に理由を説明できますか?
また、if ... else ...とはどのように異なりますか?

4

3 に答える 3

5

コメントで述べたように、演算子の優先順位に問題があります。コードは次のように解釈されます。

((a > 1) ? b = 10 : b) = 50;

上記のコードは、書き込み (b = 10) = 50が無効であるのと同じ理由で無効です。

コードは、次のように明確に記述できます。

b = a > 1 ? 10 : 50;

また、if ... else ...とはどのように異なりますか?

条件演算子は、をオペランドとしてのみ機能します。ステートメントには、本文にステートメントif含めることができます。

条件演算子は、常に同等のifステートメントに置き換えることができます。ただし、その逆は当てはまりません。同等の条件演算子式で置き換えることができないifステートメントがあります。

于 2012-08-19T10:00:44.203 に答える
2

発生する問題は、演算子の優先順位です。演算子の=優先順位は演算子よりも低くなり?:ます。

于 2012-08-19T09:53:13.610 に答える
2

私はあなたのコードが次のようになるべきだと思います:

int main()  
{  
      int a=2,b=3; 

      b=(a>1)?10:50; 

      printf("%d",b);  
      return 0;     
}

乾杯。

于 2012-08-19T09:56:06.957 に答える