Какие операторы не требуют окончания с запятой в C++?


Существует ли правило, относительно которого операторы не должны заканчиваться точкой с запятой?

3 2

3 ответа:

Да, это описано в разделе 6," оператор " стандарта C++ (раздел 6 C++03, возможно, он изменился в 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.

Операторы блока не должны иметь точки с запятой после них, поэтому нам не нужна точка с запятой после закрывающей фигурной скобки в этом коде:

while (true) {
    cout << "Hi!" << endl;
}
Любое выражение, действующее как оператор, должно иметь точку с запятой после него, поэтому строка cout выше заканчивается точкой с запятой.

Управляющие операторы (if, do, while, switch, и т.д.) не нуждаются в точке с запятой после них, за исключением do ... while, должны иметь точку с запятой после него. Однако, если утверждение, что они контролируют заканчивается точкой с запятой, сам общий оператор будет. Например:

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

Заканчивается точкой с запятой, потому что управляемый оператор cout заканчивается точкой с запятой.

Операторы изменения потока управления, такие как break, continue, goto, return, и throw должны иметь точки с запятой после них.

Операторы объявления, такие как прототипы функций, объявления переменных и объявления struct/class/union, должны заканчиваться точкой с запятой.

Для полного списка типы операторов и их синтаксис вы можете проверить в §6 стандарта ISO C++, который описывает грамматики для каждого из этих типов операторов. Вот как мне удалось составить этот список.

Надеюсь, это поможет!

  1. Макроопределения не требуют ни того, ни другого.

  2. Все ключевые слова (такие как if, else, for, while, do, main) после скобок открываются и закрываются ,не требуют точки с запятой, как было указано ранее.

3.После этих индентификаторов void, int, string, long etc..no требуется точка с запятой.

4.Функции также не нуждаются в точке с запятой, когда появляются дефинитоны.

Такие как void fun(){........}