2016-06-09 169 views
1

我嘗試使用Doxygen 1.8.11使用Dot(GraphViz 2.38)爲固定形式的Fortran代碼生成調用/調用者圖形。Doxygen的呼叫/呼叫者圖形引用缺少Fortran函數

調用/調用者圖對子例程工作正常,但對於聲明瞭返回值的函數失敗(即沒有繪製引用)。

即用於下面的代碼,在MYSUB調用圖中未示出,以MYFUNC呼叫:

integer function MYFUNC() 
    implicit none 
    MYFUNC = 1 
    end function 

    subroutine MYSUB() 
    implicit NONE 
    integer MYFUNC 
    integer RESULT 
    RESULT = MYFUNC() 
    return 
    end 

有趣的是,如果我從MYSUB刪除行integer MYFUNC,調用圖被正確地繪製,但是該代碼不再有效(即它不能編譯)。

有沒有一個選項可以將函數調用包含在調用/調用者圖中?

+0

如果您明確指定(已暗示)'external'屬性,是否有幫助。比如'integer,external :: myfunc'或者'external myfunc'? – francescalus

+0

@francescalus不,它沒有幫助 –

回答

1

從我所知道的情況來看,這是因爲Doxygen不知道MYFUNCMYSUB與功能MYFUNC是同一回事。 您可以通過在MYSUB中爲其編寫一個interface塊來生成MYFUNC的呼叫圖,但這不會生成MYSUB的呼叫圖。

爲了讓Doxygen正確生成調用/調用者圖,您應該將這兩個過程放在一個模塊中(或者,您可以將它們放在它們自己的單獨模塊中)。這也消除了需要在MYSUB定義MYFUNC

module foo 

    implicit none 

contains 

    integer function myfunc() 
    myfunc = 1 
    end function myfunc 

    subroutine mysub (res) 
    integer res 
    res = myfunc() 
    end subroutine mysub 

end module foo 

此外,Doxygen的似乎並沒有產生與大寫名稱程序呼叫/主叫圖表,至少在1.8.8版本。我在Doxyfile中有CASE_SENSE_NAMES = YES,所以我懷疑這是一個錯誤。

+0

感謝您的答案。在分析一些遺留代碼時,將功能移到模塊目前是不行的。作爲一種解決方法,我只是將該函數的聲明作爲一個變量(即註釋掉'integer MYFUNC')來移除 –