2011-06-28 143 views

回答

6

逗號表現爲在函數調用,函數聲明,初始化和變量聲明的隔板:

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

與此相反,用於分離的語句時,它表現爲逗號運算:

a = 2, b = 3; 
c = (doSomething(), doSomethingElse(), result()); 

它產生的結果是其最右邊的操作數的值,並且執行順序保證從左到右,與函數參數的未定義順序相反。

+3

還有其他一些情況:'int a = 2,b = 3;'與'a = 2,b = 3;'不同。 –

+0

@David:更新了我的答案。 –

+0

還是......這份清單涵蓋了一些但並非全部。即使所有內容都是正確的,因爲我們不能保持一致,因爲對於初學者來說,@Als中顯示的一些案例會回答(爲什麼它沒有upvotes?) –

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

基本上,它無處不在表現爲一個操作符的表達式需要(與表達式的列表)。