为什么三元运算符没有块?换句话说,为什么下面的代码不起作用并报告错误{}
braces?
int main()
{
int i = 1;
(i==1)?{printf("Hello\n")}:{printf("World\n")};
return 0;
}
EDIT
也许这个问题被误解了。问题是:为什么不支持块?为什么只有单一表达?
为什么这不允许工作?
int main()
{
int i = 1;
(i==1)?{printf("Hello\n");printf("World\n");}:{printf("Bye\n");printf("World\n");};
return 0;
}
原因之一可能是三元经常用于左侧的条件赋值,而块不会有这样的返回,或者它会与块内的多个语句混淆。
去引用C11
标准,第 §6.5.15 章,条件运算符的语法是
conditional-expression:
logical-OR-expression
logical-OR-expression ? expression : conditional-expression
其中,第二个和第三个操作数是expression
,而不是陈述。
只是为了详细说明,
对于第二个和第三个操作数,应满足以下条件之一:
— 两个操作数都具有算术类型;
— 两个操作数具有相同的结构或联合类型;
— 两个操作数都是 void 类型;
— 两个操作数都是指向兼容类型的限定或非限定版本的指针;
— 一个操作数是指针,另一个是空指针常量;或者
— 一个操作数是指向对象类型的指针,另一个操作数是指向限定或
void 的不合格版本。
Edit:
回答问题
为什么只有单一表达?
再次引用标准,
....结果是第二个或第三个操作数的值(以计算的值为准),转换为下面描述的类型。
语句块,不会给出value。的评价expression
can.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)