我在一个用 C 编写的项目中使用 doxygen 作为文档。在那个项目中有很多重复的代码。由于我仅限于使用纯 C(不允许使用 C++),因此我使用宏来减少源文件中的重复。在由宏生成的代码中,我希望包含函数和类型声明(它们遵循一种模式,实际的宏很容易编写)。我真的希望这些生成的函数和类型出现在 doxygen 文档中,因为它们对库 API 至关重要。但是,我正在努力使 doxygen 正确扩展宏
Doxygen 并不总是扩展宏。例如,在同一行代码中,相同的类似函数的宏被调用两次,第一次展开但第二次没有展开。
我觉得解释这个问题的最好方法是展示一个 MRE(你可以从这里下载)
考虑以下文件 singlefile.h
/** @file singlefile.h
@defgroup singlefile singlefile.h: Single File Example
Test file
@{
*/
#ifndef _SINGLE_FILE_H
#define _SINGLE_FILE_H
#define _CCONCAT(X, Y) X ## Y
#define _CONCAT(X, Y) _CCONCAT(X, Y)
#define CONCAT(X, Y) _CONCAT(X, Y)
#define MY_TYPE_FULL(MY_TYPE) CONCAT(My, MY_TYPE)
#define MY_TYPEDEF_H(MY_TYPE) typedef struct MY_TYPE_FULL(MY_TYPE) MY_TYPE_FULL(MY_TYPE);
MY_TYPEDEF_H(Account)
#endif
/** @} */
Run Code Online (Sandbox Code Playgroud)
宏调用的预期输出MY_TYPEDEF_H(Account)是以下类型声明
typedef struct MyAccount MyAccount;
Run Code Online (Sandbox Code Playgroud)
这在 …