关于编码样式:行注释字符和实际注释开始之间的空格

Space between line-comment character(s) and start of actual comment

我认识到,这条规则可能不同于一家公司的编码标准,但一般来说,哪一个是首选的?

  • 行注释后有空格:

    1
    2
    3
    int foo = Bar(quux + 1); // compensate for quux being off by 1

    foo = Bar(quux + 1) # compensate for quux being off by 1
  • 行注释后没有空格:

    1
    2
    3
    int foo = Bar(quux + 1); //compensate for quux being off by 1

    foo = Bar(quux + 1) #compensate for quux being off by 1
  • 我在网上找不到任何关于这种编码风格方面的信息。我的猜测是,包括一个空间是所有语言的首选样式,但我希望一些"确凿的证据"来证实或否认这一点。


    到目前为止,似乎每个人都有轶事证据表明使用空间是首选。有人能指出我的方向,一些官方或其他出版的编码标准,直接解决问题的意见格式和是否应该使用一个空间?


    我已经用多种语言开发了大约10年的大型和小型项目软件。我还没有看到有人故意不使用空间。在事物的图式中,它实际上没有那么重要(毕竟,我们都知道这些是注释,并且可以阅读它们),但是我认为无空间版本看起来类似于注释掉的代码,需要额外的毫秒的脑能量来确认它是注释:—)


    python的官方风格指南pep 8对此问题非常清楚:

    Each line of a block
    comment starts with a # and a single space (unless it is indented
    text
    inside the comment).

    还有:

    Inline
    comments should be separated by at least two spaces from the statement.
    They should start with a # and a single space.

    这证实了每个人的轶事证据,但我认为这是根据要求引用"一些官方或其他出版的编码标准"的第一个答案;-)。


    在过去的24年中,我在C、C++、Pascal、Basic、Java、Perl、Object C、Bernshell、BASH、CSH、TCSH和C68、PowerPC和X86等组件中开发和维护代码。在这段时间里,我注意到一些事情…

  • 带前导空格的注释比不带空格的注释至少常见1000倍。注释中缺少前导空格通常是由于草率的输入导致的打字错误。

  • 我不记得在没有空格的专业书籍或手册中看到过示例代码中的注释。

  • 我认识的唯一一个经常在评论中省略前导空格的专业开发人员,是在使用一个不使用空格的非西方表意文字系统的情况下长大的。

  • 我从来没有,从来没有见过一个官方的公司编码风格,告诉人们在评论中忽略了领先的空间。

  • 总之,我要说的是,压倒性的证据是,一行评论后的空格是首选。


    我刚刚遇到了Stylecop的SA1005规则,其中规定:

    A violation of this rule occurs when a
    single-line comment does not begin
    with a single space. For example:

    1
    2
    3
    4
    5
    private void Method1()
    {
      //A single-line comment.
      //   A single-line comment.
    }

    The comments should begin with a single space after the leading forward slashes:

    1
    2
    3
    4
    5
    private void Method1()
    {
      // A single-line comment.
      // A single-line comment.
    }

    因为StyleCop在某种程度上是微软的产品,所以我认为这可以作为一个官方的编码标准来处理行注释中的空格。


    我已经找到了标准(根据维基百科)在Java中评论。这应该是"符合Sun Microsystems JavaDoc标准"的:

    1
    2
    3
    4
    5
    6
    /**
     * Registers the text to display in a tool tip.   The text
     * displays when the cursor lingers over the component.
     * @param text  the string to display.  If the text is null,
     *              the tool tip is turned off for this component.
     */

    所以我开始认为标准是一个空间。另外,所有其他示例都有一个空格。


    我尽量避免在一行代码的末尾有注释,因为这样注释就挂在末尾,扫描时就不容易解析了。不过,当我有充分的理由时,我喜欢使用两个空格来分隔代码和注释(然后在注释标记后使用一个空格)。它只是让眼睛更容易…

    考虑:

    1
        int top;  // Index of the top of the stack.

    对比:

    1
        int top; // Index of the top of the stack.

    从主观上看,两个空格似乎只会让区分代码和非代码变得更容易。


    谷歌Java样式指南格式化部分需要在注释的两侧放置一个空间:

    4.6.2 Horizontal whitespace

    Beyond where required by the language or other style rules, and apart from literals, comments and Javadoc, a single ASCII space also appears in the following places only.

    ...

  • On both sides of the double slash (//) that begins an end-of-line comment. Here, multiple spaces are allowed, but not required.

  • 谷歌C++风格指南需要两个空间http://GITHUB.COM/谷歌/StultGue/BLUB/GH页面/CPPLITN/CPPLIT.PY-L3014。即int foo = 1337 // bar