3

C中的'if'语句不是表达式的原因是什么?为什么将三元运算符添加到 C 而不是“if”表达式?

是有技术原因还是只是一个历史决定?

Ed.:为了让事情更清楚,我想象了一个像这样的“if”表达式:如果它的结果​​没有被使用,它的行为可能就像一个语句,但如果某事需要结果,它必须else有相同的返回类型。

现在我看到结果是模棱两可的:确实,它是表达式和​​语句的奇怪混合,所以清晰的分离更好。

4

2 回答 2

9

我会说因为 C 是一种命令式语言,建模机器,而不是数学,所有函数都有一个值。

if 表达式需要一个强制的 else 表达式(或强制的异常抛出),它不适合只为使用的东西付费的面向性能和机器的编程语言。


(旁注)标准可以规定,如果 if 表达式不在赋值的右侧,则 else 部分变为可选的。然而,这会使 C 语法更加复杂。

第二个限制:在一个表达式中,您只能使用其他表达式。例如,您不能:

int i = if (foo) { for (int x=4; x; --x) {}; 42 } else bar;

虽然原则上是可能的,但我认为这会带走 C 的一些美丽、简约的语法。您将不得不扩展琐碎表达式与代码块的规则,您需要在解析时记住更多上下文,等等。(/边注)


C++ 中的三元运算符(注意:C++)正是这样做的:需要一个 else 部分,因为它是一个表达式或抛出一个异常:

int foo = frob ? bar : throw "crap";

那东西基本上是一个 if-else-表达式;Python 将是替换为以下语言的?:示例if/else

foo = frob if bar else 42

您所描述的实际上是两件事:If 语句和 if 表达式。两者都在 C 中;两者都有明显的特点。而且,不知何故,你问为什么不是if 语句 if 表达式都是表达式

于 2013-02-22T13:22:44.117 回答
0

if 是这样定义的:

"if" <whitespace> "(" <whitespace> <expression> <whitespace> ")" <whitespace> <statement>

So it will accept a statement if the condition is met. If it was an expression it would need to return something, hence it would only be able to execute other expressions rather than general statements. In fact the ?: can only execute conditional expressions but not statements.

于 2013-02-22T13:24:17.017 回答