【发布时间】:2015-09-26 20:09:32
【问题描述】:
为什么三元运算符没有块?换句话说,为什么下面的代码不起作用并报告{}大括号的错误?
int main()
{
int i = 1;
(i==1)?{printf("Hello\n")}:{printf("World\n")};
return 0;
}
编辑
也许这个问题被误解了。它是:为什么不支持块?为什么只有一个表达式?
为什么不允许这样做?
int main()
{
int i = 1;
(i==1)?{printf("Hello\n");printf("World\n");}:{printf("Bye\n");printf("World\n");};
return 0;
}
一个原因可能是三元常用于左侧的条件赋值,而块将没有这样的返回,或者它会与块内的多个语句混淆。
【问题讨论】:
-
因为需要返回一个值。但是GCC可以这样
(i==1)?({printf("Hello\n");}:({printf("World\n");}); -
如果您的意图是使用多个语句,您可以在三元运算符中使用函数调用
-
因为这是对三元运算符的糟糕使用。
-
我认为编译器只允许一个表达式可能是因为两个原因.. 1. 它将它理解为布尔或 1/0 表达式 & 多个语句可能会妨碍 2. 这对可读性..为此我们有 if-else 我猜它更具可读性
-
@BLUEPIXY,我的 gcc 编译器不喜欢发布的代码,也不喜欢你的示例行。除其他外,此警告:“... ISO C 禁止在表达式 [-Wpedantic] 中使用大括号组”
标签: c language-lawyer ternary-operator