首先我們要知道在C語言中,逗號表達式的優先級是最低的 (也就是說賦值運算符 '=' 都比逗號表達式優先級高)。
例如:
int a=(2*6,4+8,55);
請問a=?
答:先計算括號內的逗號表達式的值,該逗號的值爲55,再把55賦值給a,所以a=55
int a=5;
a=(a=2*3,a*4),a+10;
請問a=?
很多人覺得a=34,計算方法如下:a=6,a又等於6*4=24,最後a=24+10=34;
實際上這個答案是錯誤的,因爲讀者可能犯了一個錯誤,認爲逗號表達式的值是取自最後一次計算的結果。
若回過頭看我紅色加粗標註的地方,就會發現原來a=24已經完成了計算(此時表達式變成a+10),
之後又算了一步沒用的操作。
逗號表達式的用途:
在for循環裏經常會用到,除了在for循環裏用到外,我們在宏定義裏也經常遇到:
#define SWAP(a,b) a^=b,b^=a,a^=b
而傳統多行語句的寫法是do {...} while(0);
相比而言,很多時候在宏中還有用逗號表達式寫簡潔多了。