代码之家  ›  专栏  ›  技术社区  ›  Chris Nelson

如何防止Doxygen在C文件中记录定义?

  •  9
  • Chris Nelson  · 技术社区  · 15 年前

    我有 #define 我当然希望doxygen记录头中的值,但还有其他值 C 我将其视为静态常量的文件,不希望Doxygen记录它们。像这样简单和愚蠢的东西

    #define NUMBER_OF(a) (sizeof((a))/sizeof((a)[0]))
    #define MSTR(e) #e
    

    我怎么才能不让多西根放那些 α定义 在它创建的文档中?我试过用 @internal 但这似乎没有帮助。

    关于强力根和 α定义 ,如何获得:

    #define SOME_CONSTANT 1234 /**< An explanation */
    

    在输出中输入“some_constant”和“analysis”,而不是“1234”?

    7 回复  |  直到 6 年前
        1
  •  3
  •   Community CDub    8 年前

    您可以使用从Doxygen解析中排除代码的任何部分 \cond ... \endcond 标签。

    编辑: 一些相关问题:

        2
  •  9
  •   bszente    14 年前

    不需要使用 \cond \endcond 命令。只需使用 \hideinitializer 命令:

    #define SOME_CONSTANT 1234 /**< An explanation @hideinitializer */
    

    关于第一个问题,你可以设定 HIDE_UNDOC_MEMBERS = YES 并且只有具有doxygen文档块的宏才会显示在输出中。

        3
  •  4
  •   emp    14 年前

    可以在doxy文件中设置max_initializer_lines=0以隐藏定义的值。

        4
  •  1
  •   Ben Hocking    15 年前

    毫无疑问,它看起来仍然很嘈杂和不自然,但要解决你的另一个问题,请尝试:

    /** An explanation */
    #define SOME_CONSTANT /** @cond */ 1234 /** @endcond */
    
        5
  •  1
  •   albert    6 年前

    您只想记录在 .h 文件夹。我假设您声明所有静态函数和变量为 static 在你 .c 文件夹。其余的都在 h 也有相应的文件。这些是你的“公众”成员。

    在这种情况下,我喜欢做的是,我相信多西根更适合这样使用:

    这将仅索引您的 h 文件夹。您仍然可以添加包含 C 文件到 输入 在你 DOXY文件 ,他们将被扫描为您的“公众”成员的附加文档…

        6
  •  0
  •   Be Kind To New Users    11 年前

    我通过将文档从.c文件移到.h文件来解决这个问题。然后只在.h文件上运行doxygen。

    然后我想要记录的项目(公共项目)本质上就是Doxygen收集到的。

    因为我以前很小心地将“public”项放在.h文件中,将“private”项放在.c文件中,所以这个方法非常有效。

    当我注意到强力根在拉包的时候,我想到了这个方法。令我吃惊的是,如果我还移动了调用模块需要使用的include的子集,那么这个列表也将被记录下来。

    这种技术还有一个额外的好处:我可以在更新文档时将文档放在一个终端窗口中,将源文件放在另一个终端窗口中。

        7
  •  0
  •   dominik liebaug    6 年前

    有时,您可能有一个要记录的定义,但希望doxygen对其进行不同的处理(甚至完全忽略它以避免解析错误)。 为此,您可以在doxygen中定义与在源代码中定义不同的定义。

    例子: 有些编译器允许变量链接到特定的段,即:

    const int myvar @ "segment_of_myvar_in_memory"=123;
    

    =gt;doxygen会将“内存中的变量”部分的“段”解析为不需要的变量名。 我们可以使用一个定义:

    #define __link_to_segment(name) @ name
    const int myvar __link_to_segment("segment_of_myvar_in_memory")=123;
    

    如果预处理是活动的,那么由于函数(如使用括号定义)的缘故,doxygen现在将我们的变量解释为一个函数。 但是,如果我们在doxy文件中重新定义了定义,行为会发生变化:

    PREDEFINED = __link_to_segment(a)=
    

    现在,变量被正确地解析为变量——前面的所有类型或关键字也被正确地显示为关键字。

    好的侧面效果: 如果您在代码中使用两个不同的IDE(一个用于编译和调试的IDE,一个用于编辑),您还将发现一些IDE(即Eclipse)在解析带有@“段名”的变量时存在问题。使用上述方法,您也可以重新定义“连接到”段(名称):

    #define __link_to_segment(name)
    

    例如,Eclipse随后将正确地显示和分析变量,而“编译和调试”IDE仍然可以将变量链接到其段名。