什么样的语句不需要在C ++中使用分号终止?

时间:2012-06-15 00:55:50

标签: c++ parsing syntax grammar

是否有关于哪些陈述不需要用分号终止的规则?

3 个答案:

答案 0 :(得分:3)

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

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

任何充当语句的表达式都必须在其后面加一个分号,这就是为什么上面的cout行以分号结束的原因。

控制语句(ifdowhileswitch等)除了do ... while之外不需要分号,必须使用分号之后有一个分号。但是,如果它们控制的语句以分号结尾,则整个语句本身将会。例如:

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

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

控件流更改语句(如breakcontinuegotoreturnthrow必须在其后面加分号。

声明语句(如函数原型,变量声明和struct / class / union声明)必须以分号结束。

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

希望这有帮助!

答案 1 :(得分:2)

是的,它已在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)dowhile表达式后需要分号。

答案 2 :(得分:0)

  1. MACRO定义也不需要。

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

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

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

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