【问题标题】:how to get Doxygen to work with Fortran interface statements?如何让 Doxygen 使用 Fortran 接口语句?
【发布时间】:2020-05-15 03:08:47
【问题描述】:

我正在开发免费软件项目 CCR,它允许气候和其他地球科学用户向 netCDF 添加其他压缩方法。见https://github.com/ccr/ccr

我有一个 Fortran 文件,Doxygen 给了我以下警告:

/home/ed/noaa/ccr/fsrc/ccr.F90:19: warning: Member nc_def_var_bzip2(ncid, varid, level) (function) of class ccr::nc_def_var_bzip2 is not documented.
/home/ed/noaa/ccr/fsrc/ccr.F90:36: warning: Member nc_def_var_lz4(ncid, varid, level) (function) of class ccr::nc_def_var_lz4 is not documented.
/home/ed/noaa/ccr/fsrc/ccr.F90:27: warning: Member nc_inq_var_bzip2(ncid, varid, bzip2p, levelp) (function) of class ccr::nc_inq_var_bzip2 is not documented.
/home/ed/noaa/ccr/fsrc/ccr.F90:44: warning: Member nc_inq_var_lz4(ncid, varid, lz4p, levelp) (function) of class ccr::nc_inq_var_lz4 is not documented.

但我已经记录了这些功能。 doxygen 抱怨的行号是接口语句的一部分:

module ccr

  !> Interface to initialization function.
  interface
     function nc_initialize_ccr() bind(c)
       use iso_c_binding
     end function nc_initialize_ccr
  end interface

  !> Interface to C function to set BZIP2 compression.
  interface
     function nc_def_var_bzip2(ncid, varid, level) bind(c)
       use iso_c_binding
       integer(C_INT), value :: ncid, varid, level
     end function nc_def_var_bzip2
  end interface

  !> Interface to C function to inquire about BZIP2 compression.
  interface
     function nc_inq_var_bzip2(ncid, varid, bzip2p, levelp) bind(c)
       use iso_c_binding
       integer(C_INT), value :: ncid, varid
       integer(C_INT), intent(inout):: bzip2p, levelp
     end function nc_inq_var_bzip2
  end interface

  !> Interface to C function to set LZ4 compression.
  interface
     function nc_def_var_lz4(ncid, varid, level) bind(c)
       use iso_c_binding
       integer(C_INT), value :: ncid, varid, level
     end function nc_def_var_lz4
  end interface

  !> Interface to C function to inquire about LZ4 compression.
  interface
     function nc_inq_var_lz4(ncid, varid, lz4p, levelp) bind(c)
       use iso_c_binding
       integer(C_INT), value :: ncid, varid
       integer(C_INT), intent(inout):: lz4p, levelp
     end function nc_inq_var_lz4
  end interface

如何让 Doxygen 查看接口的文档?

【问题讨论】:

  • 您是否尝试将 cmets 移动到接口块中?
  • Doxygen manual“其他地方的文档” 部分可能包含您正在寻找的答案。我没有尝试过,但解决方案可能就像在评论开头添加\interface 一样简单。
  • Doxygen 抱怨接口中定义的方法没有记录在案,在我看来接口已记录或者我错过了什么(也许添加一张图片并指出你错过了什么)。您使用的是哪个版本的 doxygen?

标签: fortran doxygen


【解决方案1】:

答案是使用@fn 标记,并在module_name::fn_name:: 之后指定整个函数签名。这是另一个项目的示例:

  interface
     !> @fn bacio_module::baciol::baciol(mode, start, newpos, size, no, nactual, fdes, fname, datary)
     !> Do a bacio operation.
     !>
     !> @param mode
     !> @param start
     !> @param newpos
     !> @param size
     !> @param no
     !> @param nactual
     !> @param fdes
     !> @param fname
     !> @param datary
     !>
     !> @author Ed Hartnett @date 21-10-18
     integer function baciol(mode, start, newpos, size, no, nactual, &
          fdes, fname, datary) bind(C)
       use, intrinsic :: iso_c_binding
       integer(c_int), value, intent(in) :: mode
       integer(c_long), value, intent(in) :: start, newpos
       integer(c_int), value, intent(in) :: size
       integer(c_long), value, intent(in) :: no
       integer(c_long), intent(inout) :: nactual
       integer(c_int), intent(inout) :: fdes
       character(kind=C_char), intent(in) :: fname(*)
       character(kind=C_char), intent(in) :: datary(*)
     end function baciol
  end interface

【讨论】:

  • 这里不能使用\copydoc 或者\snippet{doc}
猜你喜欢
  • 2021-11-09
  • 2014-04-10
  • 1970-01-01
  • 2011-02-23
  • 1970-01-01
  • 1970-01-01
  • 2017-08-20
  • 2012-02-26
  • 2017-01-18
相关资源
最近更新 更多