C中'if'语句不是表达式的原因是什么?为什么三元运算符被添加到C而不是'if'表达式?
是否有技术原因或仅仅是一个历史决定?
Ed:为了让事情更清楚,我想象一个'if'这样的表达式:如果没有使用它的结果,它可能就像一个语句,但如果某些东西需要结果,它必须有同一返回类型的else
分支。
现在我看到结果是模棱两可的:实际上,它是表达式和语句的奇怪混合,所以清晰的分离更好。
答案 0 :(得分:9)
我想说因为C是一种命令式语言,建模机器,而不是数学,所有函数都有价值。
if-expression需要一个强制性的else-expression(或强制异常抛出),它不适合于面向性能和机器的编程语言,在这种语言中你只需支付你使用的内容。
(旁注) 标准可以声明如果if-expression不在赋值的右侧,则else部分变为可选。但是,这会使C语法更复杂。
第二个限制:在表达式中,您只能使用其他表达式。你不能举例:
int i = if (foo) { for (int x=4; x; --x) {}; 42 } else bar;
虽然原则上可行,但我认为这会带走一些C的美妙,简约的语法;你必须扩展琐碎表达式与代码块的规则,你需要在解析时记住更多的上下文,等等。 (/旁注)
C ++中的三元运算符(注意: C ++ )完全相同:需要else-part,因为它是表达式或抛出异常:
int foo = frob ? bar : throw "crap";
那件事基本上是一个if-else- 表达式;对于将?:
替换为if/else
的语言,Python就是一个示例:
foo = frob if bar else 42
你所描述的实际上是两件事:if-statements和if-expression。两者都在C;两者都有不同的特点。并且,不知何故,你问为什么不是 if-statements 和 if-expressions 是表达式。
答案 1 :(得分:0)
使用类似的东西来定义if:
"if" <whitespace> "(" <whitespace> <expression> <whitespace> ")" <whitespace> <statement>
如果满足条件,它将接受声明。如果它是一个表达式,它将需要返回一些东西,因此它只能执行其他表达式而不是一般语句。事实上,?:只能执行条件表达式而不能执行语句。