2011-06-28 7 views
3

可能性の重複:
When all does comma operator not act as a comma operator?コンマ演算子とカンマ区切り文字

は(、)演算子としてカンマ振る舞うんとするとき、それはセパレータとして振る舞うんと結果は何ですか?可能であれば、両方の例をあげてください。

+0

重複:http://stackoverflow.com/questions/3128346/when-all-does-comma-operator-not-act-as-a-comma-operator; http:// stackoverflow。com/questions/54142/c-comma-operator;だけでなく、。 –

答えて

6

コンマは関数呼び出し、関数宣言、初期化子と変数宣言におけるセパレータとして振る舞う:

a = 2, b = 3; 
c = (doSomething(), doSomethingElse(), result()); 
:対照的

f(a, b); 
int a[] = {2, 3, 4}; 
int c = 2, d = 3; 

別のステートメントに使用される場合、それはコンマ演算子として振る舞います

結果は、右端のオペランドの値であり、実行順序は、未定義の関数引数の評価順序とは異なり、左から右になることが保証されています。

+3

他の場合があります: 'int a = 2、b = 3;'は 'a = 2、b = 3;'とは異なります。 –

+0

@David:私の答えを更新しました。 –

+0

まだ...リストにはすべてが含まれているわけではありません。私はすべてのことが正しかったとしても、それが脇に置かれていてもupvoteすることはできません。まず、@Alsで示されたケースのいくつかが答える(なぜアップフォースがないのですか?) –

3

カンマ(、トークンによって表される)コンマ演算子は、その最初のオペランドを評価し、結果を破棄し、バイナリ演算子であるOperator

として、それは、この値は第二オペランドとリターンを評価します(タイプを入力してください)。コンマ演算子は、C演算子の中で最も低い優先順位を持ち、シーケンスポイントとして機能します。

例:関数を呼び出す

  • /int i = (5, 10); /* 10 is assigned to i*/ 
    

    コンマ演算子の主な用途は、側次のような状況で効果を生成することです。

  • 繰り返しループの開始または繰り返し。
  • 条件をテストします。
  • 副作用が必要であるが式の結果がすぐには必要でないその他の状況。関数呼び出しと定義、機能マクロのように、変数宣言、enum宣言、及び類似の構築物を使用した場合

コンマSeparator

としてコンマセパレータとして作用します。

例:

int a = 1, 
b = 2; 
void fun(x, y); 

他の例:

void fun(f1(), f2()); 
1

基本的には、式は(式のリストとは対照的に)必要とされることをどこでもオペレータとして振る舞います。

関連する問題