如何Doxygen评论生成的代码

时间:2011-10-24 19:25:04

标签: c++ c doxygen c-preprocessor

我正在使用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定义的注释。但在我的案例中,这是一个小问题。

1 个答案:

答案 0 :(得分:4)

尝试以下

  1. 在Doxygen配置文件中,告诉它处理宏。
  2. 在宏定义中,在每个成员之后添加Doxygen注释:

    #define ATTRIBUTES \  
    X(TITLE, "title") /**!< title element */ \  
    X(FILENAME, "filename") /**!< file name element */ \  
    X(GENRE_ID, "genre_id") /**!< title element */  
    
  3. 由于代码格式问题,每行的注释应为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]);
    

    现在只需在表格中搜索枚举并阅读文本。将枚举值和文本放在一个结构中的好处是,它允许枚举值更改,但其余代码不必更改。