为什么"if"不是C中的表达式

Dmy*_*nko 3 c compiler-construction if-statement

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

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

Ed:为了使事情更清楚,我想象一个'if'这样的表达式:如果没有使用它的结果,它可能就像一个语句,但如果某些东西需要结果,它必须有一个else分支相同的退货类型.

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

Seb*_*ach 9

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

if-expression需要一个强制性的else-expression(或强制异常抛出),它不适合于面向性能和机器的编程语言,在这种语言中你只需支付你使用的内容.


(旁注)标准可以声明如果if-expression不在赋值的右侧,则else部分变为可选.但是,这会使C语法更复杂.

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

int i = if (foo) { for (int x=4; x; --x) {}; 42 } else bar;
Run Code Online (Sandbox Code Playgroud)

虽然原则上可行,但我认为这会带走一些C的美妙,简约的语法; 你必须扩展琐碎表达式与代码块的规则,你需要在解析时记住更多上下文,等等.(/边注)


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

int foo = frob ? bar : throw "crap";
Run Code Online (Sandbox Code Playgroud)

那件事基本上是一个if-else 表达式 ; Python的将是该替代语言的例子?:if/else:

foo = frob if bar else 42
Run Code Online (Sandbox Code Playgroud)

你所描述的实际上是两件事:if-statements和if-expression.两者都在C; 两者都有不同的特点.而且,不知何故,你问为什么if语句 if-expression都不是表达式.