强氧不';无法区分'union myname'和'struct myname'`
我写了一个小矩阵库,作为我正在进行的一个更大项目的一部分。零成本换位很重要,所以我使用/滥用了工会。代码本身工作正常(如下所示),但当使用Doxygen编写文档时,它将强氧不';无法区分'union myname'和'struct myname'`,c,doxygen,C,Doxygen,我写了一个小矩阵库,作为我正在进行的一个更大项目的一部分。零成本换位很重要,所以我使用/滥用了工会。代码本身工作正常(如下所示),但当使用Doxygen编写文档时,它将struct matrix\u r和union matrix\u r的所有文档合并到一个项目中。也就是说,只有为struct matrix\u r和struct matrix\u c生成的页面,但这两个页面将matrix\u r和matrix\u c描述为并集,带有连接的@short text和连接的属性(来自结构和并集声明) 我
struct matrix\u r
和union matrix\u r
的所有文档合并到一个项目中。也就是说,只有为struct matrix\u r
和struct matrix\u c
生成的页面,但这两个页面将matrix\u r和matrix\u c描述为并集,带有连接的@short text和连接的属性(来自结构和并集声明)
我对Doxygen非常、非常陌生,但到目前为止,我还无法弄清楚如何让它将这些作为单独的文档项来处理。有什么想法吗
#include <stddef.h>
/// @brief internal stuct for row-major matrices
struct matrix_r {
int *data; ///< raw pointer backing matrix
size_t m; ///< the number of rows
size_t n; ///< the number of cols
};
/// @brief internal struct for col-major matrices
struct matrix_c {
int *data; ///< raw pointer backing matrix
size_t n; ///< the number of cols
size_t m; ///< the number of rows
};
/// @brief user-facing typedef for row-major matrices
typedef union {
struct matrix_r id; ///< identity view of matrix
struct matrix_c tr; ///< transposed view of matrix
int* flat; ///< flattened view of matrix
} matrix_r;
/// @brief user-facing typedef for row-major matrices
typedef union {
struct matrix_c id; ///< identity view of matrix
struct matrix_r tr; ///< transposed view of matrix
int* flat; ///< flattened view of matrix
} matrix_c;
#包括
///@行主矩阵的简短内部结构
结构矩阵{
int*data;//<原始指针支持矩阵
size\u t m;//<行数
大小\u t n;//<列数
};
///@列主矩阵的简短内部结构
结构矩阵{
int*data;//<原始指针支持矩阵
大小\u t n;//<列数
size\u t m;//<行数
};
///@brief面向用户的行主矩阵类型定义
typedef联合{
结构矩阵\u r id;//<矩阵的标识视图
结构矩阵_ctr;//<矩阵的转置视图
int*flat;//<矩阵的展平视图
}矩阵r;
///@brief面向用户的行主矩阵类型定义
typedef联合{
结构矩阵\u c id;//<矩阵的标识视图
结构矩阵\u r tr;//<矩阵的转置视图
int*flat;//<矩阵的展平视图
}矩阵c;
结构命令以反斜杠(\)
或(@)
开头,后跟命令名和一个或多个参数。例如,如果要记录类测试,可以将以下文档块放在doxygen读取的输入中的某个位置:
/*! \class Test
\brief A test class.
A more detailed class description.
*/
直接从中,以下是一些其他命令:
此处使用特殊命令\类指示注释
块包含类测试的文档。其他结构
命令包括:
\结构来记录C结构
\工会记录工会
\枚举以记录枚举类型
\fn记录一个函数
\var来记录变量、typedef或枚举值
\def记录一个#define
\typedef用于记录类型定义
\文件来记录一个文件
\名称空间来记录名称空间
\包来记录Java包
\接口来记录IDL接口
编辑: 我相信这就是强氧的工作原理。见 此处的文档: 在“typedefs”一节中。它说: 涉及类、结构和联合的typedef,如 typedef结构结构名TypeName 为StructName创建别名,以便生成指向的链接 StructName,当遇到StructName本身或TypeName时 Doxygen认为联合标签名是“真实的东西”, 而不是typedef(它被认为是“真实”的别名) 事情”)。我建议:
/*!@brief The documentation of the union Name*/
typedef union Name
{
//.....
}Name;
虽然Doxygen可能是错误的(我不知道Doxygen),但您正在生成模糊的C,它有一个
struct matrix\u r
和一个类型matrix\u r
。我强烈反对这种做法。在考虑过它之后,我会承认一点——我的初衷是,struct matrix\u r
永远不会被用户直接使用,因此模糊了它的名称来阻止这种做法。然而,我现在已经将结构重命名为matrix_r_repr
,这仍然通过repr
表明它不是用于外部消费的,并且也消除了我的强氧问题。我刚才对另一个问题给出了大致相同的评论:-)()甚至明确地用\struct或\union标记它们,Doxygen错误地组合了文档条目。但是我没有看到它们在上面的程序中使用。为什么会这样?您是否尝试过分别对它们进行注释,而不是在一个/***/
下对结构和联合进行注释<代码>/*\结构测试\结构测试的简短说明*//*\联合测试\联合测试的简短描述*/这不起作用。请检查我的编辑,问题是您使用的typedef。