在C ++中,为什么在关闭大括号之前需要分号?像
这样的东西很奇怪{
statement;
statement;
statement
}
是不可能的,分号不仅是分隔符语句。我理解在类定义之后的分号是必要的,因为可能有这个类的对象的定义。但是这里有什么?
答案 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)
需要使编译器知道何时停止执行该行代码。即使它是结束括号之前的最后一行代码。
想象一下,你正在撰写一篇文章。你是否在没有满员的情况下留下每一段的最后一句话?有道理吗?