3

コードスニペットを実行しています。しかし、コードとそれが生成している出力を理解できません。

#include <stdio.h>
int main()  
{ 
  int a, b,c, d;    
  a=3;    
  b=5;    
  c=a,b;    
  d=(a,b);      
  printf("c = %d" ,c);    
  printf("\nd = %d" ,d);    
  return 0;
}  

このプログラムの出力は次のとおりです。

c=3
d=5

出力がどのように来ているのかわかりませんか?

4

3 に答える 3

9
  1. カンマがある場合、式は正しいパラメーターとして評価されます。そのため、d=(a,b);はとして評価されd=bます。
  2. =カンマよりも優先順位が高いため、式c=a,b;は次のように評価されます。(c=a),b;

答えの一部ではありませんが、式全体がaではなく、c=a,b;として評価されることを言及する価値があります。たとえば、書くとANDが得られます。bd=(c=a,b);c=ad=b

于 2012-04-30T06:27:45.177 に答える
3

Cのコンマ演算子の優先順位を考慮してください。

于 2012-04-30T06:27:44.687 に答える
1

コンマ演算子は C++ でオーバーロードされる可能性があることに注意してください。したがって、実際の動作は、予想されるものとは大きく異なる場合があります。

例として、Boost.Spirit はコンマ演算子を非常に巧妙に使用して、シンボル テーブルのリスト初期化子を実装しています。したがって、次の構文が可能で意味のあるものになります。

keywords = "and", "or", "not", "xor";

演算子の優先順位により、コードは (意図的に!) と同じであることに注意してください。

(((keywords = "and"), "or"), "not"), "xor";

つまり、呼び出される最初の演算子は、keywords.operator =("and") であり、残りの演算子が呼び出されるプロキシ オブジェクトを返します。

keywords.operator =("and").operator ,("or").operator ,("not").operator ,("xor");
于 2012-04-30T06:36:27.790 に答える