2012-04-30 12 views
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 

は私が得ていないのですか?

答えて

3

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

9
  1. コンマを使用すると、式が正しいパラメータとして評価されます。そのため、d=(a,b);d=bと評価されます。
  2. =表現c=a,b;全体c=a,b;式は、例えば、b、いないと評価されていること(c=a),b;

ない答えの一部が、言及する価値があると評価されるように、コンマを超えるhigher precedenceを持っていますd=(c=a,b);と書くと、c=aとなり、d=bとなります。

1

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

例として、Boost.Spiritはカンマ演算子を使ってシンボルテーブルのリスト初期化子を実装しています。したがって、それは次の構文が可能と有益なものとする:原因演算子の優先順位に、コードであること(!意図的に)

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

と同じである、と呼ばれる最初のオペレータがキーワードであることを

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

お知らせ.operator =( "and")残りの演算子が呼び出される代理オブジェクトを返す。

keywords.operator =("and").operator ,("or").operator ,("not").operator ,("xor"); 
関連する問題