功能后的分号

时间:2012-04-03 16:56:57

标签: c++ syntax

是否有一个特定的原因可以解释为什么有些人在卷曲关闭函数括号后添加分号?

void foo() {

};

6 个答案:

答案 0 :(得分:23)

不是真的,那里的分号没什么区别。这可能是一个习惯问题。

如果你想要,你可以在C ++ 11中输入尽可能多的分号:

void foo() {

};;;;;;;;

答案 1 :(得分:1)

不,它被忽略了。看起来像是一个错字。

答案 2 :(得分:1)

分号必须遵循类定义卷曲右括号。在类定义中的类成员函数定义之后不需要它。虽然在类定义中单独使用类成员函数声明后是必需的。

#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

答案 3 :(得分:1)

您的问题的答案取决于此功能定义的范围。

如果在 namespace 范围内定义此类函数,则尾随;与函数定义无关。它只是构成一个单独的空定义,它遵循函数定义。在现代C ++中,空定义在命名空间范围内是合法的。这也意味着在命名空间范围内,您可以添加任意多个额外的多余分号。

如果在 class 范围中定义此类函数,则始终允许您在定义的末尾添加单个可选;。这样的;是函数定义的组成部分,语法明确允许它。即在类范围中,尾随;不构成独立的空定义。此外,类范围中不允许使用空定义。这意味着在类范围内,您只能在函数定义之后添加一个可选的;,但不能更多。

答案 4 :(得分:0)

您必须问特定个人。但是,如果我不得不猜测:在C ++中,有些情况下,当您必须在}之后加上分号时,例如类,枚举,结构-也许有人总是这样做,因为他们不想记住什么时候有必要。

答案 5 :(得分:0)

只是想补充一下我对分号插入的一般看法:

  1. 从语义上讲,如果函数是可执行语句(如匿名函数的变量声明)的一部分,则函数后的分号是可以的。

    var x = function(){ console.out('Hello'); }

  2. 请注意,如果在不必要的函数后添加分号,它将在LOC中被视为一条语句。诸如Lint,Sonar等之类的工具会将其视为代码行。基本上,您的客户将为代码行的数量付费。(例如kloc指标。.数千行代码是向客户收费的常见指标)。

  3. Javascript解析器还具有分号的习惯,即在感觉当前行的代码可能会中断的地方插入分号,例如在函数中的return语句后等。JS引擎的过程称为“自动分号插入”您可以通过谷歌搜索ECMAScript标准中的自动分号插入。