如何通过doxygen扩展宏,但没有记录为定义?

说我有:

#define MY_MACRO(FOO) void FOO(); MY_MACRO(hi); MY_MACRO(hey); MY_MACRO(hello); #undef MY_MACRO 

我希望通过doxygen扩展宏,我可以通过正确的方式配置它来完成:

 ENABLE_PREPROCESSING = YES MACRO_EXPANSION = YES EXPAND_ONLY_PREDEF = YES EXPAND_AS_DEFINED = MY_MACRO 

这使我能够在doxygen输出中看到宏的扩展结果(函数hiheyhello )。 到目前为止,这一切都很好。 但问题是,doxygen还将MY_MACRO为定义。 但是,我不希望API的客户端知道MY_MACRO ,因为它没有用,并且不能被它们使用,并且不应该对它们可见。

我的doxygen配置中有EXTRACT_ALL = YES ,我不想改变它。 我尝试了以下配置但没有成功:

 PREDEFINED = DOXYGEN_SKIP_FOR_USERS 

使用以下代码:

 #ifndef DOXYGEN_SKIP_FOR_USERS #define MY_MACRO(FOO) void FOO(); #endif /*DOXYGEN_SKIP_FOR_USERS*/ MY_MACRO(hi); MY_MACRO(hey); MY_MACRO(hello); #undef MY_MACRO 

这隐藏了define的文档,但当然会阻止扩展,所以我没有得到生成的API中记录的函数。

我很感激你的帮助。

假设MY_是您在代码中始终使用的前缀:)我将使用前缀MY__ (两个下划线)作为内部宏,然后放置类似的内容

 EXCLUDE_SYMBOLS = MY__* 

Doxygen配置文件中。

编辑:内部符号的双下划线是为C ++保留的(不适用于C)。 因此,如果您想与C和C ++兼容,您应该选择其他类型的约定。 不幸的是,前导下划线也是保留的,所以_MY_也不会这样做。