22

我想在 doxygen 输出中获取枚举成员的实际值。例如我有:

///MyEnum
typedef enum My_Enum
{
MY_ENUM_0,///<MY_ENUM_0
MY_ENUM_1,///<MY_ENUM_1
MY_ENUM_2 ///<MY_ENUM_2
} My_Enum;

输出是:

MyEnum.
Enumerator:
MY_ENUM_0
      MY_ENUM_0.
MY_ENUM_1
      MY_ENUM_1.
MY_ENUM_2
      MY_ENUM_2.

我想要的是:

Enumerator:
MY_ENUM_0
          0 MY_ENUM_0.
MY_ENUM_1
          1 MY_ENUM_1.
MY_ENUM_2
          2 MY_ENUM_2.

或类似的东西。

4

2 回答 2

1

我无法想到直接从 doxygen 中执行此操作的方法。Doxygen 不是 C 编译器。因此它不会导出作为编译时常量的枚举的值。

doxygen 可以做的最接近的事情是选择性地扩展你的宏,因为它确实有一个 C 预处理器。因此,如果您为通过预处理器扩展派生的常量分配了一些值,doxygen 可以扩展宏并向您显示将被分配的内容。

基于 TheCodeArtist 的回答,您可能会考虑编写在 doxygen 之前运行的脚本,复制您的文件,搜索此模式:

enum *** {
    ***, ///< %VAL%:

并将每次出现的 %VAL% 替换为应为的值,这样您就不必手动跟上数字。在 doxygen 运行包含 %VAL% 令牌的原始文件之后,需要替换。这不是一个特别优雅或强大的解决方案。

于 2018-09-19T16:53:26.683 回答
0

使用 doxygen,我们可以记录:

  • enum
  • 它的价值观
  • 每个值的描述

以下代码片段描述了上述所有 3 个示例。

/*! \enum My_Enum
* Documentation of the enum type.
*/

typedef enum My_Enum {
    MY_ENUM_0, /*!< Document the value 0 */
    MY_ENUM_1, /*!< Document the value 1 */
} My_Enum;

/*! \var My_Enum MY_ENUM_0
 * The description of the MY_ENUM_0. Can contain its enumerated name */

/*! \var My_Enum MY_ENUM_1
 * The description of the MY_ENUM_1. Can contain its enumerated name*/

另请注意,由于宏/枚举扩展不会发生在 doxygen 注释中。如果在 doxygen 注释中使用了任何内容,则需要使用INPUT_FILTER. 例如:

INPUT_FILTER = sed /MY_ENUM_0/0

以下代码段需要

typedef enum My_Enum {
    MY_ENUM_0, /*!< MY_ENUM_0 */
    ...

另请查看此答案以获取有关多种 doxygen 评论样式的详细信息:

  • ///< <comment>
  • /*!< <comment> */
于 2014-04-03T16:54:53.983 回答