2010-03-15 75 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);