2

次のコードに関して問題があります。

#include<stdio.h>
void main()
{ int a=6,b=2,g;
  a>b?g=a:g=b;
 }

これはエラーなしで適切に実行されています。しかし、適切に表示されていれば、これによりLvalue Requiredエラーが発生するはずです。(a>b?g=a:g)は、 a>b?g=a:(g=b)のように括弧が使用されていないため、実際の式です。値b は、2 番目の代入 (=) 演算子の左側の式を解いて得られた定数値に代入されていますが、これは確かにエラーです。このトピックについて助けてください。

4

4 に答える 4

2

The result of the conditional operator is never a lvalue in C.

If you didn't get a diagnostic with the statement with the conditional expression, it is not C. Check you are using a C compiler (and not a C++ compiler - the rules for the conditional operator are different in C++) and that the ISO mode is enabled.

于 2013-02-12T18:35:13.993 に答える
1

三項演算子はそれ自体が Rvalue です。制御フローを正確に実行するわけではなく、条件が与えられた場合に値を返します。

修正するには、 を試してくださいg = a > b ? a : b

于 2013-02-12T18:29:53.990 に答える
0

そんなことしたらダメ:

a>b?g=a:g=b;

これを試して:

g = (a>b)?a:b;
于 2013-02-12T18:30:16.633 に答える
0

g=パーツを最初に移動します。

g=a>b?a:b;

それはあなたが望むことをします...

于 2013-02-12T18:30:23.250 に答える