Doxygen:如何在不更改CSS的情况下显示枚举数值?

24
我需要找到一种方法,使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.

或类似的东西。


最近我又看到了这个问题,我的建议是在doxygen问题跟踪器(https://github.com/doxygen/doxygen/issues/new)中开一个问题。 - albert
请参见以下关于Doxygen枚举类型的问题:https://stackoverflow.com/questions/52387561/doxygen-enum-with-explicit-hard-value - albert
2个回答

2
我想不到任何直接从doxygen进行此操作的方法。 Doxygen不是C编译器,因此它不会推导枚举的值,这是编译时常量。
doxygen能够做的最接近的事情就是有选择地展开您的宏,因为它具有C预处理器。因此,如果您将某个值分配给由预处理器扩展派生的常量,doxygen可以展开宏并显示将被分配的内容。
在TheCodeArtist的答案基础上,您可以考虑编写脚本,在运行doxygen之前创建文件副本,搜索此模式:
enum *** {
    ***, ///< %VAL%:

替换每个%VAL%出现的地方,使值更好理解,不必手动跟踪数字。doxygen运行后,包含%VAL%令牌的原始文件需要被替换。这不是一种特别优雅或强大的解决方案。

1
请查看我的带有问题的评论。 - albert
@albert 感谢您的建议,也感谢您链接了关于这个主题的其他问题。我认为这是一个很好的新功能想法。我发现自己曾多次需要半手动计算枚举值的情况。 - Nick

0

使用Doxygen,我们可以记录:

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

下面的代码片段描述了上述三个示例。

/*! \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> */

5
这并没有回答问题。MY_ENUM_0的值为0,但它不会在您回答中所生成的Doxygen文档中显示出来。 - Étienne
doxygen注释/*!<Document the value 0 */将与MY_ENUM_0一起显示在生成的文档中,如此示例答案所示。每个这样的注释都必须是“值为0”,“值为1”等等,对于枚举的每个成员。 - TheCodeArtist
7
因为您自己写了“0”,所以OP想知道如何让Doxygen生成这个“0”。 - Étienne
是的,你说得对。它需要手动操作。这是我所知道的最接近可行的方法。 - TheCodeArtist
7
当然,我并不是有意无礼。问题在于枚举值可以使用宏或其他枚举值进行定义,这样就很难知道枚举具有哪个值,并手动记录/更新它会变得相当复杂。 - Étienne

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接