2012-09-14 97 views
0

在C以下是有效的代碼:這種類型的C語句被稱爲什麼?

if ((a, a+b, a*b) >= 0) { 
    .... 
} 

是否(a, a+b, a*b)部分有一個特殊的名字嗎?

+2

這是一個非常無意義的表達。評估每個部分,但除了用於比較的評估之外,沒有任何評估有任何常規效果。 – chris

+0

@chris,除非'a'和'b'是'volatile',在這種情況下訪問會產生副作用。 – ouah

+0

@ouah,很好看看所有的可能性。 – chris

回答

7

x, y被稱爲逗號表達式。

,在C中被稱爲逗號運算符,並且(x, y, z)((x, y), z)相同。

它不能與分隔函數參數的逗號和不是逗號運算符的逗號混淆。

+0

語言建議:我認爲「不能混淆」更好。 –

+0

@DanielFisher謝謝,我接受它 – ouah

+1

值得一提的是,逗號運算符從左到右評估,但結果總是正確的運算符。丟棄左操作符的評估結果。所以(x,y)將計算爲y,所以((x,y),z)等於(y,z)。然後(y,z)將評估爲z。 – Lundin