【发布时间】:2025-08-01 20:55:01
【问题描述】:
我正在使用 C 预处理器在枚举中生成元素。有没有办法为生成的元素编写 doxygen cmets?我不能只在 doxygen 之前通过预处理器运行它,因为这会剥离 doxygen cmets。
例子:
#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 定义的注释。但这对我来说只是个小问题。
【问题讨论】:
-
您可能会滥用 ## 运算符来生成 // 令牌 - 但您将处于未定义行为的领域。问题是在扩展宏之前,cmet 在翻译阶段 3 中被删除。
标签: c++ c doxygen c-preprocessor