我正在使用C预处理器在枚举中生成元素。有没有办法为生成的元素编写doxygen注释?我不能在doxygen之前通过预处理器运行它,因为这将剥离doxygen注释。
示例:
#define ATTRIBUTES \
X(TITLE, "title") \
X(FILENAME, "filename") \
X(GENRE_ID, "genre_id")
enum ATTRIBUTES_ENUM {
#define X(a, b) a##_ATTRIBUTE,
ATTRIBUTES
#undef X
ATTRIBUTES_COUNT
};
并添加如下内容:
/**
* \def TITLE_ATTRIBUTE
* The media's title.
*/
不起作用。
修改 感谢Thomas Matthews,这是我使用的解决方案:
#define ATTRIBUTES \
X(TITLE, "title") /*!< title attribute */ \
X(FILENAME, "filename") /*!< filename attribute */ \
X(GENRE_ID, "genre_id") /*!< genre id attribute */
#define X(a, b) a##_ATTRIBUTE,
enum ATTRIBUTES_ENUM {
ATTRIBUTES
ATTRIBUTES_COUNT
};
#undef X
告诉Doxygen扩展宏。唯一的缺点是最后一个元素的注释也用作ATTRIBUTES
定义的注释。但在我的案例中,这是一个小问题。
答案 0 :(得分:4)
尝试以下
在宏定义中,在每个成员之后添加Doxygen注释:
#define ATTRIBUTES \
X(TITLE, "title") /**!< title element */ \
X(FILENAME, "filename") /**!< file name element */ \
X(GENRE_ID, "genre_id") /**!< title element */
由于代码格式问题,每行的注释应为C sytle注释。
我的理解是Doxygen应该处理宏(进行替换),然后将修改后的文本提供给它的注释引擎。
只是一个猜测。
我强烈建议将枚举转换为文本的不同架构。使用数组,向量或映射。如:
enum Attributes_Enum
{
TITLE, FILENAME, GENRE
};
struct Enum_Text_Entry
{
enum Attributes_Enum value;
const char * text;
};
Enum_Text_Entry Enum_To_Text[] =
{
{TITLE, "title"},
{FILENAME, "filename"},
{GENRE, "genre"},
};
const unsigned int NUMBER_OF_ENTRIES =
sizeof(Enum_To_Text) / sizeof(Enum_To_Text[0]);
现在只需在表格中搜索枚举并阅读文本。将枚举值和文本放在一个结构中的好处是,它允许枚举值更改,但其余代码不必更改。