Fortran 函数缺少 Doxygen 的 call/caller 图形引用

Doxygen's call/caller graph references missing for Fortran functions

我尝试使用 Dot (GraphViz 2.38) 使用 Doxygen 1.8.11 为固定形式的 Fortran 代码生成 call/caller 图。

call/caller 图对于子例程工作正常,但对于具有声明的 return 值的函数失败(即没有绘制引用)。

即对于以下代码,对 MYFUNC 的调用未显示在 MYSUB 的调用图中:

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

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

有趣的是,如果我从 MYSUB 中删除行 integer MYFUNC,调用图会正确绘制,但代码不再有效(即无法编译)。

是否可以选择在 call/caller 图表中包含函数调用?

据我所知,这是因为 Doxygen 不理解 MYSUB 中的 MYFUNC 与函数 MYFUNC 是同一回事。 您可以通过在 MYSUB 中为其编写 interface 块来生成 MYFUNC 的调用图,但这不会为 MYSUB.[=21= 生成调用图]

为了让 Doxygen 正确生成 call/caller 图,您应该将这两个过程放在一个模块中(或者,您可以将它们放在各自独立的模块中)。这也消除了在 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 似乎不会为具有大写名称的过程生成 call/caller 图表,至少在版本 1.8.8 中是这样。我的 Doxyfile 中有 CASE_SENSE_NAMES = YES,所以我怀疑这是一个错误。