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

问题描述 投票:2回答:3

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

c++ parsing syntax grammar
3个回答
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表达后需要分叉。


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节,该标准覆盖了每种类型语句的语法。这就是我能够编译这个列表的方式。

希望这可以帮助!


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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.