Точка с запятой после функции - PullRequest
20 голосов
/ 03 апреля 2012

Есть ли конкретная причина, по которой некоторые люди ставят точку с запятой после фигурной закрывающей скобки функции?

void foo() {

};

Ответы [ 4 ]

24 голосов
/ 03 апреля 2012

Не совсем, точка с запятой там не имеет значения. Это, вероятно, дело привычки.

Вы можете поставить столько точек с запятой, если хотите, хотя в C ++ 11:

void foo() {

};;;;;;;;
1 голос
/ 05 ноября 2016

Ответ на ваш вопрос зависит от области, в которой определено это определение функции.

Если вы определите такую ​​функцию в namespace scope, то конечный ; не имеет ничего общего с определением функции. Он просто представляет собой отдельное пустое определение, которое следует за определением функции. Пустые определения являются допустимыми в области имен пространства в современном C ++. Это также означает, что в области имен вы можете добавить столько лишних точек с запятой, сколько пожелаете.

Если вы определите такую ​​функцию в области видимости class , то вам всегда будет позволено добавить один необязательный ; в конце определения. Такой ; является неотъемлемой частью определения функции и явно разрешен грамматикой. То есть в контексте класса этот конечный ; не является независимым пустым определением. Кроме того, пустые определения не допускаются в области видимости класса. Это означает, что в область видимости класса можно добавить только один необязательный ; после определения функции, но не более.

1 голос
/ 03 апреля 2012

Точка с запятой должна следовать за фигурной закрывающей скобкой определения класса. Это не требуется после определения функций-членов класса внутри определения класса. Требуется, хотя после объявления функций-членов класса внутри определения класса.

#ifndef FRAME_COUNTER_H
#define FRAME_COUNTER_H

#include <iostream>

#include <SDL/SDL.h>

const Uint32 FPS = 60;
const Uint32 DELAY_TIME = 1000.0f / FPS;


class FrameCounter {

public:
    FrameCounter();

    void setFPS(int FPS) { m_FPS = FPS / (m_frameAccumulator / 1000); }

    void start() { m_frameStart = SDL_GetTicks(); }

    void run();

    void reset() {}

    void print() { printf("\nFPS: %5.1f\n", m_FPS); }

private:
    int m_frameNumber;

    Uint32 m_frameStart;
    Uint32 m_frameDuration;
    Uint32 m_frameAccumulator;

    double m_FPS;
};

#endif
1 голос
/ 03 апреля 2012

Нет, это просто игнорируется.Похоже на опечатку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...