2012-03-03 165 views
5

我有一個包含具有相同名稱的兩個函數是C項目,但每個是不同的基團/模塊(@defgroup)內。處理具有相同名稱的兩個不同的功能中的Doxygen

這些函數每個都編譯成不同的二進制文件,但我需要將文檔緊密地交叉引用,所以我需要從其他模塊中引用(@ref)這些函數(以及其他地方)。

當我做簡單的@ref name-of-the-function時,它總是鏈接到駐留在文件樹中較早的文件中的那個。我怎樣才能鏈接到另一個?

+0

顯而易見的是:你可以重命名函數,避免名稱衝突? – 2012-03-03 19:09:15

+0

@JörgBeyer號這些是我必須提供的API的一部分(我必須提供這兩者)。 – 2012-03-03 19:12:48

+0

您的C API具有相同名稱的函數嗎?我認爲Doxygen將是你的最後一個問題...... – 2012-03-03 19:18:22

回答

1

這可以爲你工作嗎?

該示例剝離下來的兩個文件交流轉換器b.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和鏈接工作(他們從一個函數的每個文檔鏈接到另一個函數)。

+0

但是你鏈接到組,而不是功能,對嗎? (在我的情況下包含函數的組還包含許多其他功能和由該組代表的子系統的大量文檔,因此僅僅連接到組是不理想的)。 – 2012-03-03 20:11:30

+0

你是對的,我更新了它。我現在似乎是((其他)文件中的函數的鏈接。 – 2012-03-03 20:31:31

+0

這似乎只鏈接文件的頁面,而不是函數。 – 2012-03-03 20:43:22

1

至於我可以看到:的Doxygen的autolinking不支持具有相同名稱的多個功能。

如果有多個功能/具有相同名稱的方法,將Doxygen的只是鏈接它找到的第一個,如在問題說明。調用圖也是不正確的。這似乎適用於所有的語言,不只是C.

這已被報告爲一個bug多次:

D部分"Known problems"氧的文檔也描述了類似的問題:

這是不可能在A類 使用\涉及或\ relatesalso命令插入非成員函數f,如果類A已經與名稱的 構件f和相同的參數列表。


有一些希望;有人提出了一個補丁來更好地處理具有相同名稱的功能:656694 - getDefs fails to resolve local function names if same global name exist

此修補程序實現以下兩個策略來解決 重複的名稱。首先,是在當前文件中定義的名稱,使用 的本地名稱。其次嘗試使用原型 定義來匹配名稱。

這會部分解決問題。不幸的是,自2012年以來,該門票沒有任何活動...

0

doxygen 1.8.13中的一個解決方案是爲HTML <a></a>提供明確的鏈接。例如,我有一個功能QF_run(),它在三個不同的文件qv.c,qk.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輸出呈現方式爲自動生成的鏈接相同。只要您不更改函數的名稱,鏈接也是穩定的。

要獲得函數的散列值,只需在瀏覽器中打開它的文檔,並在#號後複製鏈接。

相關問題