为什么Doxygen分组枚举具有来自不同C文件的相同名称?

fur*_*ury 5 c doxygen

我正在使用Doxygen 1.8.5并且具有与以下问题相同的问题,只有语言是C而且枚举在C文件中:

Doxygen C#XML注释:使用相同名称和不同范围的枚举相乘?

根据https://bugzilla.gnome.org/show_bug.cgi?id=522193它修复了1.6.0,但我猜Doxygen并没有将不同的C文件视为具有不同的命名空间.

有问题的枚举仅适用于每个特定文件,但称为相同名称,因为它们在该文件中用于相同的目的(例如,用于跟踪有关该模块的状态信息的标志).C编译器对此没有任何问题,但Doxygen将它们组合在一起.

例:

在file1.c

enum status_flags {
    sfACTIVE,
    sfSHUTDOWN,
    sfWARNING,
};
Run Code Online (Sandbox Code Playgroud)

file2.c中

enum status_flags {
    sfSTANDBY,
    sfSCREEN_OWNED,
};
Run Code Online (Sandbox Code Playgroud)

doxygen文件将生成两个枚举组合的blob,包括每个成员的注释,并在两个文件的文档中引用它们.

枚举status_flags

枚举

sfACTIVE

sfSHUTDOWN

sfWARNING

sfSTANDBY

sfSCREEN_OWNED

在文件file1.c的第42行定义.

枚举status_flags

枚举

sfACTIVE

sfSHUTDOWN

sfWARNING

sfSTANDBY

sfSCREEN_OWNED

在文件file2.c的第65行定义.

我已经尝试使每个文件成为它自己的@addtogroup的成员,并且我已经确保每个文件在顶部都有一个@file,但它仍然将所有这些枚举混合在一起,这些枚举应该是特定于C的私有文件.如果我被迫重命名这些枚举,那将会有点痛苦,因为代码中有许多应用程序都遵循相似的格式并使用具有不同标志的同名私有枚举.编译器非常乐意与他们合作.

有任何想法吗?

小智 0

匿名 typedef 枚举也有同样的问题,

typedef enum {
    sfACTIVE,
    sfSHUTDOWN,
    sfWARNING
} status_flags;
Run Code Online (Sandbox Code Playgroud)

导致合并问题,但 Doxygen 似乎优先考虑枚举,因此当您执行此操作时不会发生合并:

typedef enum status_flags_f1 {
    sfACTIVE,
    sfSHUTDOWN,
    sfWARNING
} status_flags;

typedef enum status_flags_f2 {
    sfSTANDBY,
    sfSCREEN_OWNED
} status_flags;
Run Code Online (Sandbox Code Playgroud)

仅当 Doxyfile 配置文件中的 TYPEDEF_HIDES_STRUCT 设置为 NO(默认设置)时,此功能才有效。