10

#define在头文件中有我当然希望 Doxygen 记录的值,但我在C文件中有其他值,我将它们视为静态常量,我不希望 Doxygen 记录它们。简单而愚蠢的事情

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

如何防止 Doxygen 将这些#defines 放入它创建的文档中?我试过用它做标记,@internal但这似乎没有帮助。

关于 Doxygen 的一个有点相关的问题#define,我怎样才能得到:

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

在输出中放置“SOME_CONSTANT”和“An explain”而不是“1234”?

4

7 回答 7

12

无需使用\condand\endcond命令。\hideinitializer您可以通过简单地使用以下命令来隐藏初始化程序:

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

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

于 2011-04-12T14:13:20.527 回答
5

您可以在 doxyfile 中设置 MAX_INITIALIZER_LINES = 0 以隐藏定义的值。

于 2011-03-08T17:06:01.037 回答
3

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

编辑:一些相关问题:

于 2009-11-04T16:46:35.913 回答
2

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

在这种情况下,我喜欢做的事情,我相信 doxygen 更适合以这种方式使用:

这将仅索引.h文件中包含的内容。您仍然可以将包含您的.c文件的目录添加到INPUT您的Doxyfile,并且它们将被扫描以获取您的“公共”成员的其他文档......

于 2014-01-21T20:23:23.537 回答
1

毫无疑问,它仍然会显得嘈杂和不自然,但要解决您的其他问题,请尝试:

/** An explanation */
#define SOME_CONSTANT /** @cond */ 1234 /** @endcond */
于 2010-03-14T20:07:33.073 回答
0

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

然后我想要记录的项目(“公共”项目)本质上就是 doxygen 拾取的。

因为我之前一直小心地将“公共”项目放在 .h 文件中,而将“私人”项目放在 .c 文件中,所以效果很好。

当我注意到 doxygen 正在拉入包含时,我想到了这种技术。令我震惊的是,如果我还要移动调用模块需要使用我的模块的包含子集,那么该列表也将被记录下来。

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

于 2014-04-24T03:05:53.457 回答
0

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

示例:一些编译器允许变量链接到特定段,即:

const int myvar @ "segment_of_myvar_in_memory"=123;

=> doxygen 会将“segment_of_myvar_in_memory”部分解析为不需要的变量名。我们可以为它使用一个定义:

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

如果预处理处于活动状态,Doxygen 现在将我们的变量解释为一个函数,因为使用括号进行类似函数的定义。但是如果我们在 Doxyfile 中重新定义我们的定义,行为会发生变化:

PREDEFINED = __link_to_segment(a)=

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

一个很好的副作用:如果您在代码中使用 2 个不同的 IDE(一个用于编译和调试的 IDE,一个用于编辑),您还会发现某些 IDE(即 Eclipse)在解析带有 @"segment name" 的变量时存在问题。使用上述方法,您也可以在那里重新定义 __link_to_segment(name) :

#define __link_to_segment(name)

即 Eclipse 将正确显示和解析变量,而“编译和调试”IDE 仍然可以将变量链接到其段名称。

于 2018-12-05T08:43:45.790 回答