Dmy*_*nko 3 c compiler-construction if-statement
C中"if"语句不是表达式的原因是什么?为什么三元运算符被添加到C而不是'if'表达式?
有技术原因还是只是一个历史决定?
Ed:为了使事情更清楚,我想象一个'if'这样的表达式:如果没有使用它的结果,它可能就像一个语句,但如果某些东西需要结果,它必须有一个else分支相同的退货类型.
现在我看到结果是模棱两可的:实际上,它是表达式和语句的奇怪混合,所以清晰的分离更好.
我会说因为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都不是表达式.
| 归档时间: |
|
| 查看次数: |
210 次 |
| 最近记录: |