为什么许多语言在`if`条件周围使用括号

时间:2016-02-08 15:20:46

标签: language-design

许多编程语言需要围绕if条件的括号。

例如:

if (x < 50)
{
}

为什么不能这样写,没有括号:

if x < 50
{
}

假设语言设计师是务实的人,为什么需要括号?

3 个答案:

答案 0 :(得分:2)

在C中,if实际上是一个逗号运算符,而不仅仅是一个表达式。人们可以写:

int i = 0;
if (i = i + 1, i/2 > 0) {
}

所以你需要括号(实际上是括号)。例如while()也是如此。

然而,C中的

return运算符只接受一个表达式,因此它不需要括号:

return i + 1;

虽然很多程序员仍然写得像:

return (i + 1);

答案 1 :(得分:1)

真正简短的回答是&#34;因为他们的语法/语法语言定义&#34;并且它与表达式中的括号无关。

在语言定义中,创建者定义了一组开发人员必须遵循的规则。

在C,C ++,Objective C,java,javascript和其他基于C语言的语法中,括号用于他们的语法来定义如何将条件表达式与句子分开执行,但它只是用于定义,因为它是不需要。 Dennis Ritchie(C创建者)本可以用另一种方法将条件表达式与true / false语句分开,但他选择了括号。

# Grammar of "if sentence" in C (in BNF)
<if-statement> ::= if ( <expression> ) <statement>
                 | if ( <expression> ) <statement> else <statement>

Modula2,Pascal,ADA,Delphi,Oracle PL / SQL和其他基于Modula2的语言不会用括号定义语法,但是他们使用关键字then将条件表达式与语句分开:

# Grammar of "if sentence" in Pascal (in BNF)
<if-statement> ::= if <expression> then <statement> 
                 | if <expression> then <statement> else <statement>

相同的答案适用于whilefor等其他句子。

参见完整的C语法here和Pascal语法here以供参考。

答案 2 :(得分:-2)

简单回答:运算符优先级。记住基本的高中/小学数学:7 * 4 + 3的答案是什么? 31?还是49?

大括号允许您强制使用自己的OWN优先级,以覆盖语言的自然优先级:

(7 * 4) + 3 -> 31 (the natural answer by BEDMAS rules)
7 * (4 + 3) -> 49

如果您正在谈论{},那么允许表达式使用多行块。

没有大括号:

if (...)
   a = 1;  // only this line is part of the "if"
   b = 1;  // ignore the indentation - this is always executed

v.s。

if (...) {
   a = 1;  // part of the "if"
   b = 1;  // also part of the "if"
}