3

是否有关于哪些语句不需要以分号结尾的规则?

4

3 回答 3

3

块语句后面不需要分号,这就是为什么我们在这段代码中的右大括号后面不需要分号:

while (true) {
    cout << "Hi!" << endl;
}

任何作为语句的表达式后面都必须有一个分号,这就是cout上面的行以分号结尾的原因。

控制语句(if, do, while,switch等)后面不需要分号,除了do ... while, 后面必须有分号。但是,如果他们控制的语句以分号结尾,则整个语句本身都会。例如:

while (true) cout << "Are we there yet?" << endl;

以分号结尾,因为受控cout语句以分号结尾。

控制流更改语句,如break, continue, goto,returnthrow后面必须有分号。

函数原型、变量声明和结构/类/联合声明等声明语句必须以分号结尾。

有关语句类型及其语法的完整列表,您可以查看 C++ ISO 标准的第 6 节,其中介绍了每种语句类型的语法。这就是我能够编译此列表的方式。

希望这可以帮助!

于 2012-06-15T01:00:11.733 回答
3

是的,它包含在 C++ 标准的第 6 节“声明”中(C++03 的第 6 节,它可能在 C++11 中发生了变化,但我目前无法访问那个)。

有大量的语句类型,并不是所有的都需要终止。例如,下面if是一个选择语句:

if (i == 1) {
    doSomething();
}

并且不需要用分号终止它。

在涵盖的不同陈述中,要求是:

Statement type        Termination required?
==============        =====================
labelled statement              N (a)
expression                      Y
compound statements             N (a)
selection statements            N (a)
iteration statements            N (a) (b)
jump statements                 Y
declaration statement           Y

(a) 虽然有时看起来这些以分号结尾,但事实并非如此。该声明:

if (i == 1) doSomething();

有分号终止内部{}表达式语句,而不是复合语句,当您检查上面第一个将它放在大括号内的代码段时,这应该是显而易见的。

(b)表达式do后面需要分号。while

于 2012-06-15T01:02:28.677 回答
1
  1. 宏定义也不需要。

  2. 括号打开然后关闭后的所有关键字(例如 if、else、for、while、do、main)都不需要如前所述的分号。

3.在这些标识符 void、int、string、long 等之后。不需要分号。

4.当定义出现时,函数也不需要分号。

比如 void fun(){........}

于 2012-06-15T04:05:40.553 回答