三元表达错误

时间:2010-03-15 06:37:16

标签: c expression

请考虑以下显示编译时错误的代码:

#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没有显示任何错误的原因?

4 个答案:

答案 0 :(得分:3)

为什么会这样;这是有效的,像这样的团体:

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

条件表达式的中间操作数可以是任何表达式。

答案 1 :(得分:2)

这是正确的.. 为每个?恰好一个:将在那里 三元表达式 在z?x,y?x:(y);

中不存在

答案 2 :(得分:0)

逗号,不是三元表达式的一部分。

答案 3 :(得分:0)

z?x,y?x:y:z是两个三元表达式。我会这样写:

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

每个?始终只有一个: