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
,调用图被正确地绘制,但是该代码不再有效(即它不能编译)。
有没有一个选项可以将函数调用包含在调用/调用者图中?
从我所知道的情况来看,这是因为Doxygen不知道MYFUNC
在MYSUB
与功能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
,所以我怀疑这是一个错误。
感谢您的答案。在分析一些遗留代码时,将功能移到模块目前是不行的。作为一种解决方法,我只是将该函数的声明作为一个变量(即注释掉'integer MYFUNC')来移除 –
如果您明确指定(已暗示)'external'属性,是否有帮助。比如'integer,external :: myfunc'或者'external myfunc'? – francescalus
@francescalus不,它没有帮助 –