【问题标题】:Single line comments in Ansi-CAnsi-C 中的单行注释
【发布时间】:2012-01-07 06:26:42
【问题描述】:

我习惯于// 标记来自 Java 和 Visual Studio 的单行注释,并且很惊讶 Ansi-C 不存在这种注释。使用/* my comment */ 很烦人。使用 Ansi-C 时还有其他方法可以标记单行注释吗?

【问题讨论】:

  • 如果人们解释他们为什么投反对票会很好......
  • 投反对票的原因可能是因为您提出的问题可以在 google 上轻松解决。 ANSI-C 中不存在特定的评论风格是一回事,表达烦恼是另一回事。混合评论风格是个坏习惯 /* 只是说 */
  • 嗯,确实可以很容易地发现 Ansi-C 没有针对单行 cmets 的特殊语法,但我是在询问替代方案。
  • :-) 你总是可以切换到支持它的 c99 标准,瞧,烦恼消失了

标签: c gcc


【解决方案1】:

抱歉,在 ANSI-C 中似乎只使用了 /* comment */http://members.cox.net/midian/articles/ansic1.htm

【讨论】:

    【解决方案2】:

    你也可以写一个宏:

    #define COMMENT(x)
    
    int main() {
       COMMENT(Hi there)
       return 0;
    }
    

    除此之外,在 ANSI C 中没有什么明显的 - 你注意到 /* */ 样式在 ANSI C 89 中无效是正确的

    【讨论】:

    • 该宏的缺点是您的评论不能包含逗号,除非您将其括在括号中(如COMMENT((Hi, there))
    • @caf - 同意 - 我认为它实际上不会比简单地输入 /* */ 赢得任何好处
    • @awoodland:我更喜欢 //syntax 来注释掉代码,因为您只需要在行首输入。写 COMMENT( 并在末尾加上右括号根本不会改善这一点。
    • 这种评论与传统评论相比有什么优势?
    【解决方案3】:

    ANSI-C,不,但当前的标准修订版允许使用它们,并且自 C99 以来一直如此。

    【讨论】:

    • 在最近的一次颠簸之后,我想补充一下——我不喜欢在 C99、C11 等中使用 C++ // cmets。马上,我就明白了我正在处理的事情: “这是一个 C 文件”。它从来没有给我带来任何问题。不过,这纯粹是个人喜好。此外,// cmets 在宏中不起作用 - 我不是在这里寻找宏 vs,内联参数。
    【解决方案4】:

    嗯……

    ANSI C 是 C99;它允许以// 开头的 cmets 延伸到行尾。
    在之前发布的标准 (C89/C90) 中,// cmets 没有被描述(但许多编译器还是接受了它们作为额外的)。

    您还有另一个注释选项:#if 0 / #endif 构造(通常用于注释掉“非活动”代码)

    /* ... */ #如果为0 这是一条评论 #万一 /* ... */

    【讨论】:

    • 现在变得更清晰了。我使用的是 -pedantic 选项,它强制执行严格的 ISO C 而不仅仅是 ANSI-C。说// 在 ASNI-C (C99) 中被允许,但在严格的 ISO C 中不允许,这是否正确?
    • 对于gcc,使用gcc -ansi -pedantic ...gcc -std=c89 -pedantic ... 相同(目前)。要将gcc 以符合标准的模式与C99 一起使用(就目前而言),请尝试gcc -std=c99 -pedantic ...
    • 感谢您的澄清!所以有不同版本的 C - C89、C99 和 C11。至少前两个也被标准化为ANSI-C和ISO-C,不一样吧?
    • ANSI-C 或 ISO-C 是一回事(一个由 ANSI 发布:American National Standards Institute,另一个由 ISO:International Organization用于标准化)。 ANSI 于 1989 年(以及 ISO 于 1990 年)发布了一个 C 标准,该标准被 1999 年标准(两个组织)取代,该标准将被下一个标准取代。当前标准的草案可在open-std.org/JTC1/sc22/wg14/www/docs/n1256.pdf 免费获得。即将发布的标准草案位于open-std.org/JTC1/sc22/wg14/www/docs/n1548.pdf
    • 好的,我知道了。但是,如果有另一个 ANSI 标准(C99),为什么 gcc 仍然将 -ansi 解释为 C89?
    【解决方案5】:

    ANSI C 支持 // 和 /**/。

    我们使用

    // 注释第 1 行
    用于单行和
    /*
    评论第 1 行
    评论第 2 行
    评论第 3 行
     */
    用于多行 cmets。

    【讨论】:

      猜你喜欢
      • 2012-07-28
      • 2011-10-27
      • 2014-09-29
      • 2022-01-23
      • 2012-02-11
      • 2011-02-08
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多