为什么我应该使用接口?

Ign*_*cio 2 fortran

每当我用 Fortran 编程时,我都会使用模块,并且不必担心编写接口。

现在我正在编写要在 R 内部使用的 Fortran 代码。问题是子例程不能位于模块内部,因此我“必须”编写接口。如果我不编写界面,一切都会正常,但聪明的互联网人士说我应该编写界面。

有人可以解释一下为什么吗?有什么好处?

fra*_*lus 6

正如Alexander Vogt 所说,接口块对于提供通用标识符并允许某些编译器检查非常有用。

如果您使用接口块来创建通用标识符,您可能会在模块内这样做,因此在模块不涉及时编写此类块的主要原因是为了它们在出现的范围内创建的显式接口。正是这些允许编译器检查并且不再发生与模块的使用关联。

然而,有时需要显式接口,而不是为了美观:如果引用具有某些功能的过程,则需要显式接口以使代码符合 Fortran 标准。这些功能可以在 F2008, 12.4.2.2 中找到

除语句函数之外的过程如果被引用且具有显式接口,则该过程应具有显式接口

  1. 对过程的引用出现
    (a) 带有参数关键字 (12.5.2),或
    (b) 在要求它是纯的上下文中,
  2. 该过程有一个虚拟参数,
    (a) 具有 ALLOCATABLE、ASYNCHRONOUS、OPTIONAL、POINTER、TARGET、VALUE 或 VOLATILE 属性,
    (b) 是假定形状数组,
    (c) 是协数组,
    (d) 是参数化派生类型,或者
    (e) 是多态的,
  3. 该过程的结果是
    (a) 是一个数组,
    (b) 是一个指针或者是可分配的,或者
    (c) 具有一个不是常量表达式的非假定类型参数值,
  4. 该程序是基本的,或者
  5. 该过程具有 BIND 属性。

除此之外,隐式接口就足够了,interface不需要该块。但仍然有帮助。

就您而言,它仅适用于接口具有此影响的各个 Fortran 组件之间的调用。因此,您并不总是需要编写接口,有些东西不需要它们也可以工作。