代码之家  ›  专栏  ›  技术社区  ›  Tristan

什么?在C?

c#
  •  31
  • Tristan  · 技术社区  · 14 年前

    我刚接触C并且正在阅读代码 /*!*/ 在看起来很奇怪的地方。例如,类方法定义为:

    protected override OptionsParser/*!*/ CreateOptionsParser()
    protected override void ParseHostOptions(string/*!*/[]/*!*/ args)
    

    不幸地 /*!*/ 不是googleable。这是什么意思?

    7 回复  |  直到 14 年前
        1
  •  47
  •   JaredPar    14 年前

    它很可能试图将规范样式注释转换为非规范构建。这个!规范中的注释表示值不为空。作者可能试图指出返回值、args数组和args中的所有元素都始终是非空值。

    规格链接:

    快速规格概述:

    spec是通过Microsoft研究项目创建的.NET语言。它是C语言的一个扩展,它试图将代码契约嵌入到类型系统中。最突出的是不可为空的类型(用!在类型名之后),检查异常和前/后条件。

        2
  •  19
  •   Jay Riggs    14 年前

    这是一个包含“!”的注释

    /**/中包含的任何内容都是一个注释,在代码编译时将忽略该注释。

        3
  •  6
  •   nicerobot    14 年前

    我不知道C的具体情况,因为它可能是某种东西的一个特殊符号,但我在任何支持打开/关闭的语言中都使用了类似的技术,多行注释标记允许我用单个字符更改快速注释和取消注释多行,例如:

    /*!*/
    this is live code (and will probably cause a compilation error)
    /*!*/
    
    /*!* /
    this is commented code (and should never cause a compilation error)
    /*!*/
    

    原因是 ! 是因为构造像 /** 是文档工具使用的通用标记。

    当语言支持单行注释标记时,还有其他技术, // (并实现它们,如C++和Java):

    ///* - opening comments can be commented-out so what follows isn't a comment.
    this is live code
    //*/ - closing comment are not commented-out by single-line comments.
    

    然后您可以删除第一个单行注释标记, / / ,生成一种“切换”:

    /* this is now commented.
    this is also commented.
    //*/ this line is live code.
    
        4
  •  1
  •   Samuel Carrijo    14 年前

    这是一个带有“!”的评论。可能程序员想确保您注意到第一个方法返回了一个OptionsBar,第二个方法接收到一个字符串数组,而不仅仅是一个字符串。

    您可以删除它们,它们将继续正常工作=)

        5
  •  1
  •   Rubens Farias    14 年前

    只是一个 delimited comment ;可能您的程序员只是标记了这些要点,以便稍后讨论。

        6
  •  0
  •   user177800    14 年前
    /* is start comment
    */ is end comment
    
    everything between is the comment
    you can even tell that SO highlights that area as a comment
    
        7
  •  0
  •   Phil    14 年前

    正如大家所说,这是一个评论。另外,在我看来,“!”用于划分。它似乎有助于识别兴趣点,并且像糖果一样。