为什么我们在大括号前需要分号?
Why do we need semicolon before closing brace?
在C++中,为什么我们需要在大括号前加分号?奇怪的是
{
statement;
statement;
statement
}
是不可能的,那个分号不只是定界语句。我明白class定义后的分号是必要的,因为可能有这个class的对象定义。但是这里有什么?
这是因为编译器希望每行代码都以分号结尾。没有这个它就不能确定语句。
它是必需的,以便编译器知道何时停止执行该行代码。即使它是右大括号之前的最后一行代码。
想象一下你正在写一篇文章。您是否在每个段落的最后一句都没有句号?有什么意义吗?
C++ 使用 ;
来确定语句的结束。
例如你可以这样写代码
Statement;statement;statement;
{ }
表示您当前语句的范围。
例如:
{ int a(0);} //a "dies" at the }
a = 1; //error a is not found in current scope
这就是 C++ 语法的定义方式。分号用于将表达式转换为语句:
statement = expression ';'
例如:
a = 1;
a = 1
是一个表达式,多加一个;
就得到了可以执行的语句
同样,变量或类型声明必须以分号结尾:
struct S { int x; };
但是,函数定义和块语句不以 ;
:
结尾
int main() {}
您可能会感到惊讶,因为您有 Pascal 背景。在 Pascal 中,分号用于分隔语句,因此您不需要最后一个分号。然而,如果你想写 2 个连续的块语句,在 C++ 中你写 {...} {...}
而在 Pascal 中你需要分号:begin ... end; begin ... end
.
这是编程语言理论中的一个well-known区别,终止符与分隔符。如果分号是分隔符,则不需要最后一个分号。 C选择使用终止符,C++继承了这一点,Pascal使用分隔符
然而,事实证明终结者是更好的选择。与使用分隔符相比,程序员在使用终止符时犯的错误更少。 (Gannon & Horning,语言设计对可靠软件生产的影响。可靠软件国际会议论文集 1975)。
在C++中,为什么我们需要在大括号前加分号?奇怪的是
{
statement;
statement;
statement
}
是不可能的,那个分号不只是定界语句。我明白class定义后的分号是必要的,因为可能有这个class的对象定义。但是这里有什么?
这是因为编译器希望每行代码都以分号结尾。没有这个它就不能确定语句。
它是必需的,以便编译器知道何时停止执行该行代码。即使它是右大括号之前的最后一行代码。
想象一下你正在写一篇文章。您是否在每个段落的最后一句都没有句号?有什么意义吗?
C++ 使用 ;
来确定语句的结束。
例如你可以这样写代码
Statement;statement;statement;
{ }
表示您当前语句的范围。
例如:
{ int a(0);} //a "dies" at the }
a = 1; //error a is not found in current scope
这就是 C++ 语法的定义方式。分号用于将表达式转换为语句:
statement = expression ';'
例如:
a = 1;
a = 1
是一个表达式,多加一个;
就得到了可以执行的语句
同样,变量或类型声明必须以分号结尾:
struct S { int x; };
但是,函数定义和块语句不以 ;
:
int main() {}
您可能会感到惊讶,因为您有 Pascal 背景。在 Pascal 中,分号用于分隔语句,因此您不需要最后一个分号。然而,如果你想写 2 个连续的块语句,在 C++ 中你写 {...} {...}
而在 Pascal 中你需要分号:begin ... end; begin ... end
.
这是编程语言理论中的一个well-known区别,终止符与分隔符。如果分号是分隔符,则不需要最后一个分号。 C选择使用终止符,C++继承了这一点,Pascal使用分隔符
然而,事实证明终结者是更好的选择。与使用分隔符相比,程序员在使用终止符时犯的错误更少。 (Gannon & Horning,语言设计对可靠软件生产的影响。可靠软件国际会议论文集 1975)。