使用Doxygen记录宏

时间:2017-02-17 14:37:09

标签: c documentation doxygen

/** @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_tq25_t结构。 我想用Doxygen记录它们,但无论我怎么做,结构都不会出现在文档中。甚至没有提到它们。初始结构f32_t是唯一记录的结构。

可以修复吗?

2 个答案:

答案 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部分中列出的宏。因此,如果您将宏添加到该列表中,它将是唯一扩展的宏。