18

在 Fortran 90 中,我们可以使用接口重载函数。但是,根据这个站点,我们不能用相同的参数名称定义这些函数。使用 gfortran,这似乎不是问题,因为以下代码运行良好:

interface check
  module procedure check_int, check_real
end interface

contains 

subroutine check_int(cur, dname, func_name, fname)
  integer, allocatable, intent(in) :: cur(:)
  character(*) :: dname, func_name, fname
  ...
end subroutine

subroutine check_real(cur, dname, func_name, fname)
  real, allocatable, intent(in) :: cur(:)
  character(*) :: dname, func_name, fname
  ...
end subroutine

那么,这样做是不好的做法吗?

编辑:用关键字调用函数不会改变任何东西。

4

1 回答 1

19

你的例子是完全有效的。它们可以通过参数的类型来区分。那么名字并不重要。在您的情况下,cur参数的类型不同。

具有相同名称的参数可以通过它们的类型、种类或等级(TKR 兼容性)来区分。

引用文章的要点是,您不能仅通过参数的 ORDER 来区分两个特定过程。这是因为可以以任何顺序使用关键字参数调用过程。这可以通过为参数使用不同的名称来克服。

否则,为具有相同参数名称但具有不同类型/种类/等级的通用程序声明更具体的程序是非常常见且完全有效的。

Fortran 2003/2008 为通用解析增加了更多可能性。也可以通过参数的指针/可分配属性和过程指针伪参数来区分过程。

于 2012-12-05T11:14:20.677 回答