如何防止doxygen在C文件中记录#定义?
我有如何防止doxygen在C文件中记录#定义?,c,doxygen,c-preprocessor,C,Doxygen,C Preprocessor,我有#在头文件中定义值,我当然希望Doxygen记录这些值,但在C文件中有其他值,我将它们视为静态常量,我不希望Doxygen记录它们。像这样简单又愚蠢的事情 #define NUMBER_OF(a) (sizeof((a))/sizeof((a)[0])) #define MSTR(e) #e 如何防止Doxygen将这些#define放在它创建的文档中?我试着用@internal标记它,但似乎没有帮助 关于Doxygen和#define的一个有点相关的问题,我如何获得: #define S
#在头文件中定义值,我当然希望Doxygen记录这些值,但在C文件中有其他值,我将它们视为静态常量,我不希望Doxygen记录它们。像这样简单又愚蠢的事情
#define NUMBER_OF(a) (sizeof((a))/sizeof((a)[0]))
#define MSTR(e) #e
如何防止Doxygen将这些#define
放在它创建的文档中?我试着用@internal
标记它,但似乎没有帮助
关于Doxygen和#define
的一个有点相关的问题,我如何获得:
#define SOME_CONSTANT 1234 /**< An explanation */
#定义一些常数1234/**<*/
要在输出中加入“某些常量”和“解释”,而不是“1234”,您可以使用\cond
..
\endcond
标记将代码的任何部分排除在氧气解析之外
编辑:一些相关问题:
毫无疑问,它仍然会显得嘈杂和不自然,但要解决您的另一个问题,请尝试:
/** An explanation */
#define SOME_CONSTANT /** @cond */ 1234 /** @endcond */
您可以在doxy文件中设置MAX\u INITIALIZER\u line=0以隐藏定义的值。无需使用\cond
和\endcond
命令。只需使用\hideinitializer
命令即可隐藏初始值设定项:
#define SOME_CONSTANT 1234 /**< An explanation @hideinitializer */
#定义一些常数1234/**
关于第一个问题,您可以设置HIDE\u UNDOC\u MEMBERS=YES
,输出中将只显示具有Doxygen文档块的宏。您只想记录.h
文件中声明的内容。我假设您在.c
文件中将所有静态函数和变量声明为static
。所有剩余的都在.h
相应的文件中声明。这些是你的“公众”成员
在这种情况下,我喜欢做的是,我相信doxygen更适合这样使用:
- 在
Doxyfile
中,设置并添加.h
文件所在的目录
- 添加到所有
.h
文件(但不要添加.c
文件)
这将仅为.h
文件中包含的内容编制索引。您仍然可以将包含.c
文件的目录添加到Doxyfile
的INPUT
,它们将被扫描以获取您的“公共”成员的其他文档…我通过将文档从.c文件移到.h文件解决了此问题。然后仅在.h文件上运行doxygen
然后,我想要记录的项目(“公共”项目)本质上就是doxygen收集的
因为我以前很小心地将“public”项放在.h文件中,将“private”项放在.c文件中,所以效果非常好
当我注意到doxygen正在拉入包裹物时,我想到了这项技术。我突然想到,如果我同时移动调用模块将需要使用我的模块的include的子集,那么该列表也将被记录下来
这种技术还有一个额外的好处:在更新文档时,我可以将文档放在一个终端窗口中,将源代码放在另一个终端窗口中。有时,您可能有一个要记录的定义,但希望doxygen以不同的方式处理它(甚至完全忽略它以避免解析错误)。
为此,您可以在doxygen中定义与在源代码中不同的#define
例如:
某些编译器允许变量链接到特定段,即:
const int myvar @ "segment_of_myvar_in_memory"=123;
=>doxygen将把“内存中的\u myvar\u的\u段”部分解析为不需要的变量名。
我们可以使用一个定义:
#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)=
现在变量被正确地解析为变量-前面的所有类型或关键字也正确地显示为关键字
好的一面:
如果您在代码中使用两个不同的IDE(一个用于编译和调试,一个用于编辑),您还会发现一些IDE(即Eclipse)在解析带有@“段名”的变量时遇到问题。使用上述方法,您也可以在此处重新定义u链接到u段(名称):
#define __link_to_segment(name)
i、 e.Eclipse随后将正确显示和解析变量,而“编译和调试”IDE仍然可以将变量链接到其段名。我想这解决了#define in.c文件问题(我可以用条件控制围绕这些行)。不过,这似乎很吵闹,很不自然。而且根本不解决#defined’d常量的隐藏值问题。(也许我不应该问一个复杂的问题,但我希望有一些#define-specific的东西可以解决这两个问题。)我不知道如何显示define常量而不显示其值。我已经让cond/endcond工作了,但我真的想知道为什么internal不工作。我的氧氟沙星肯定很弱-(不幸的是,我同意你对@internal的误解。强氧的许多方面对我来说仍然不清楚。学习过程缓慢,但值得一试。