2010-03-15 33 views
1

考慮下面的代碼,顯示編譯時錯誤:錯誤三元表達

#include <stdio.h> 

int main(int argc, char** argv) 
{ 
    int x=5,y=0,z=2; 
    int a=z?x,y?x:(y); // but z?x,y?x:y:z is not showing any error 
    printf("%d",a); 
return 0; 
} 

請幫我解釋一下爲什麼z?x,y?x:y:z沒有顯示任何錯誤的原因是什麼?

+0

此代碼非常容易出錯。 – 2010-03-15 12:03:22

回答

3

爲什麼會這樣;它是有效的和組這樣的:

z?(x, (y?x:y)):z 

條件表達式的中間操作數可以任何表達。

0

逗號,不是三元表達式的一部分。

+0

那麼爲什麼'z?x,y?x:y:z'沒有顯示任何錯誤 – condinya 2010-03-15 06:42:47

0

z?x,y?x:y:z是兩個三元表達式。我將它寫成這樣:

z ? (x, y ? x : y) : z 

恰好有一個?每個:始終。

+0

我不會寫它:) – erikkallen 2010-03-15 12:04:59

2

它是正確的。對於每個? ?正好一個:將會出現在 三元表達式 在z?x,y?x中沒有:(y);