在Doxygen中处理两个具有相同名称的不同函数

时间:2012-03-03 18:29:08

标签: c documentation doxygen

我有一个C项目,其中包含两个具有相同名称的函数,但每个函数都位于不同的组/模块中(@defgroup)。

这些函数每个都编译成不同的二进制文件,但我需要将文档密切交叉引用,因此我需要将(@ref)引用到彼此模块的这些函数(以及其他地方)。 / p>

当我执行简单@ref name-of-the-function时,它总是链接到文件树中较早的文件中的文件。我如何链接到另一个?

4 个答案:

答案 0 :(得分:2)

据我所知: doxygen的自动链接不支持具有相同名称的多个功能。

如果有多个具有相同名称的函数/方法,doxygen将简单地链接它找到的第一个函数/方法,如问题中所述。调用图也不正确。这似乎适用于所有语言,而不仅仅适用于C.

多次报告此错误:

doxygen的文档中的"Known problems"部分也描述了类似的问题:

  

无法在A类中插入非成员函数f   如果A类已经有了,则使用\ relate或\ relatedalso命令   名为f的成员和相同的参数列表。

有一些希望;有人提出了一个补丁来更好地处理具有相同名称的函数:656694 - getDefs fails to resolve local function names if same global name exist

  

此补丁实现了以下两种解决策略   重复的名字。首先,名称是在当前文件中定义的,使用   本地名称。其次尝试使用原型匹配名称   定义

这可以部分解决问题。不幸的是,这张票从2012年开始没有活动......

答案 1 :(得分:1)

这对你有用吗?

该示例被剥离为两个文件 a.c b.c ,只有一个函数(碰撞)函数。

档案a.c

/**
 * \defgroup agroup Group A
 */

/** 
 * the function in a, 
 * see also \link b.c myfunc() \endlink the other one 
 * \ingroup agroup
 */
void myfunc() {
    ;
}

文件b.c

/**
 * \defgroup bgroup Group B
 */

/** 
 * the function in b, 
 * see also \link a.c myfunc() \endlink the other one 
 * \ingroup bgroup
 */
void myfunc() {
    ;
}

如您所见,myfunc()有一个名称冲突。我在文档中放置了其他功能的链接。

我通过文件名来扩充功能名称

我用 doxygen 编译它,链接工作(它们从函数的每个文档链接到另一个函数)。

答案 2 :(得分:1)

在doxygen 1.8.13中适用于我的解决方案是提供与HTML <a></a>标记的显式链接。例如,我有一个函数QF_run(),它由三个不同的文件qv.cqk.cqxk.c定义。以下是这三个定义的三个链接:

<a href="qv_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
<a href="qk_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>
<a href="qxk_8c.html#a779a1bc9482e2d489dc87751cd100fdb"><b>QF_run()</b></a>

这些链接在HTML输出中呈现的方式与自动生成的链接相同。只要您不更改函数的名称,链接也是稳定的。

要获取函数的哈希值,只需在浏览器中打开其文档并复制#符号后面的链接。

答案 3 :(得分:0)

没有答案,但是C ++枚举存在相同的问题。

我们通常很懒,并将main.cpp从我们的一个CLI工具复制到下一个... 因此它们都包含:

enum class Command {
    USAGE,
    SOME_COMMAND,
}

这些工具大多数是诊断程序,PoC,用于库的实时测试工具等...

我们从所有资源中构建一个文档,因此即使该enum的多个声明位于不同的目录中,也只能在该文档中仅在解析的第一个文件中一次找到该声明,并且该声明将包含所有声明的值在所有文件中...使用clang解析不会更改任何内容...

那是非常误导的。调用图当然也是错误的...