Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何防止doxygen在C文件中记录#定义?_C_Doxygen_C Preprocessor - Fatal编程技术网

如何防止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的误解。强氧的许多方面对我来说仍然不清楚。学习过程缓慢,但值得一试。