Doxygen的呼叫/呼叫者图形引用缺少Fortran函数

问题描述:

我尝试使用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不,它没有帮助 –

从我所知道的情况来看,这是因为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')来移除 –