Doxygen不能展开宏。

3

这似乎是一个非常琐碎的任务,但我无法让Doxygen扩展宏。我已经使用了1.6.3、1.7.4、1.7.6和1.8.6版本。我也在Google上进行了很多搜索,但还是失败了。

我有一个仅包含以下行的c++文件(从Doxygen文档中复制):

#define CONST_STRING const char *
 static CONST_STRING version = "2.xx";

我按照文档的说明进行了设置:

ENABLE_PREPROCESSING   = YES
MACRO_EXPANSION        = YES

然后添加了以下内容:
EXPAND_ONLY_PREDEF     = YES
EXPAND_AS_DEFINED      = CONST_STRING 

那么

SKIP_FUNCTION_MACROS   = YES (previously NO)

我从代码生成得到的全部内容是:
1 #define CONST_STRING const char *
2 static CONST_STRING version = "2.xx";

我做错了什么?欢迎任何建议。

@CaptainObvlious - 这位用户直接从Doxygen页面中提取示例以制作MWE。 - David Hammen
应该明确一点。这不是关于C ++语法/语义的问题。这是关于Doxygen预处理源代码并展开宏,如上所述。因此,#define是一个完全有效的示例。 - user3257895
你怎么知道出了问题,user3257895? - David Hammen
1个回答

0

你为什么认为自己做错了什么?

在源文件的文档页面的“变量”部分中,你应该能看到version。如果你已经启用了源代码输出,变量version应该会链接到该变量的文档。

如果你在变量定义前加上doxygen注释,你的文档将会更好看。继续这个例子:

//! Define a constant string type.
//! @deprecated Use the typedef const_string_t instead.
#define CONST_STRING const char *

//! Software version number
static CONST_STRING version = "2.xx";

如果我用了错误的方法回答了你的问题,请接受我的道歉。这是我第一次使用Stackoverflow。从示例中,我期望doxygen生成的代码为:static const char * version = "2.xx";,即将CONST_STRING替换为"const char *"。我认为这就是MACRO_EXPANSION的意思… - user3257895
这不是MACRO_EXPANSION的意思。所示代码是您的代码,可能已删除doxygen注释。启用MACRO_EXPANSION的作用是告诉doxygen解释器在解析之前预处理您的代码。将doxygen视为编译器,但输出为API文档而不是机器代码。doxygen的前端非常类似于编译器的前端。 - David Hammen
谢谢David,听了你的解释后,我重新阅读了文档。你是正确的,我误解了描述。我的误解在很大程度上是由于Doxygen没有生成关于这个变量的文档,尽管所有正确的设置都已经包括在内,包括启用源代码输出。这是因为EXTRACT_ALL也需要被设置为YES。非常感谢你的回答! - user3257895

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接