Fortran 90/95中的功能接口

时间:2011-07-11 20:32:46

标签: function fortran subroutine fortran90 fortran95

我有一个程序调用一个子程序然后调用一个函数。我对Fortran对函数类型声明的要求感到有些困惑。我已经在函数中声明了类型(即实函数foo(...)),无论我是否在子例程声明部分声明函数,程序都可以工作。

我的具体问题是,不会声明子程序中的功能可能导致将来出现意外行为吗?我也看过界面块,我想知道这是否也是必要的。

更一般地说,我也对Fortran在幕后所做的事情感兴趣,以及为什么声明该函数或使用接口块会更重要或更不重要。

编辑:一些示例代码:

program foo
  real :: a,b,c

  call bar(a,b,c)
end program foo

subroutine bar(a,b,c)
  real :: a,b,c

  c = baz(a,b)
end subroutine bar

real function baz(a,b)
  real :: a,b

  baz = a*b
end function baz

1 个答案:

答案 0 :(得分:5)

最好的方法是在函数中声明函数,然后将函数放在模块中。然后从任何调用该函数的主程序或过程(子程序或函数)中“使用”该函数。这样,调用程序或过程将知道函数的接口并将生成正确的代码。在Fortran术语中,接口是显式的。如果从同一模块中的过程调用该函数,则不必“使用”它,因为模块中的过程彼此了解。有关示例,请参阅Computing the cross product of two vectors in Fortran 90。通常不需要使用接口,除非您调用缺少源代码的过程,或者使用其他语言的过程,例如,通过ISO C Binding访问的C.