/** @brief This is my initial struct. */
typedef struct
{
f32 v; /**< Value. */
int32 s; /**< Scale. */
} f32_t;
#define DECLARE_TYPE(N) \
typedef f32_t q##N##_t; /**< This is my Q struct. */
DECLARE_TYPE(31)
DECLARE_TYPE(25)
上面的代码声明了q31_t
和q25_t
结构。
我想用Doxygen记录它们,但无论我怎么做,结构都不会出现在文档中。甚至没有提到它们。初始结构f32_t
是唯一记录的结构。
可以修复吗?
答案 0 :(得分:1)
主要问题似乎是将文档注释放入宏中。我发现,如果我将文档注释与宏调用放在一起,那么它会反映在生成的文档中;否则,它不是。当然,您必须配置Doxygen来扩展宏,这不是它的默认行为。
例如:
/** @brief This is my initial struct. */
typedef struct
{
ae_f32 v; /**< Value. */
ae_int32 s; /**< Scale. */
} ae_f32_t;
#define DECLARE_TYPE(N) \
typedef ae_f32_t ae_q##N##_t
DECLARE_TYPE(31); /**< @brief This is my Q31 struct */
DECLARE_TYPE(25); /**< @brief This is my Q25 struct */
(我还将终止分号移出了宏,但是如果文档注释也被移动了,这只是一种风格问题。)
这是有道理的,因为预处理器所做的事情之一就是将注释转换为空格。 Doxygen必须以导致它忽略宏中的doc注释的方式做到这一点并不明显,但这样做并不合理。
答案 1 :(得分:1)
有些晚了,但是John的回答有些不完整。您在这里可以做的另一件事是设置a
。但是,这具有扩展 all 宏的负面影响,因此下一个要做的是a
。这将其限制为仅在MACRO_EXPANSION=YES
部分中定义或在EXPAND_ONLY_PREDEF=YES
部分中列出的宏。因此,如果您将宏添加到该列表中,它将是唯一扩展的宏。