为什么在关闭大括号之前我们需要分号?

时间:2015-03-01 19:55:28

标签: c++ grammar

在C ++中,为什么在关闭大括号之前需要分号?像

这样的东西很奇怪
{
    statement;
    statement;
    statement
}

是不可能的,分号不仅是分隔符语句。我理解在类定义之后的分号是必要的,因为可能有这个类的对象的定义。但是这里有什么?

5 个答案:

答案 0 :(得分:4)

这就是C ++语法的定义方式。分号用于将表达式转换为语句:

statement = expression ';'

例如:

a = 1;

a = 1是一个表达式,添加了额外的;,你有一个可以执行的语句。

同样,变量或类型声明必须以分号结束:

struct S { int x; };

但是,函数定义和块语句不以;结尾:

int main() {}

您可能会感到惊讶,因为您有Pascal背景。在Pascal中,分号用于分隔语句,因此您不需要最后一个。但是,如果要编写2个连续的块语句,在C ++中编写{...} {...},而在Pascal中则需要分号:begin ... end; begin ... end

答案 1 :(得分:3)

这是编程语言理论,终结者与分隔符之间众所周知的区别。如果分号是分隔符,那么你就不需要最后一个分号。 C选择使用终结符和继承的C ++,Pascal使用分隔符

然而,事实证明终结者是更好的选择。与使用分隔符相比,程序员使用终结符可以减少错误。 (Gannon& Horning,语言设计对可靠软件生产的影响。可靠软件国际会议论文集 1975)。

答案 2 :(得分:2)

C ++使用;来确定语句的结尾。

例如,你可以编写像这样的代码

Statement;statement;statement;

{ }表示当前语句的范围。

例如:

  { int a(0);} //a "dies" at the } 
  a = 1; //error a is not found in current scope

答案 3 :(得分:0)

这是因为编译器希望每行代码都以分号结尾。没有它,它无法确定声明。

答案 4 :(得分:0)

需要使编译器知道何时停止执行该行代码。即使它是结束括号之前的最后一行代码。

想象一下,你正在撰写一篇文章。你是否在没有满员的情况下留下每一段的最后一句话?有道理吗?