3

我有一个程序调用一个子程序,然后调用一个函数。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
4

1 回答 1

5

最好的方法是在函数中声明函数,然后将函数放在模块中。然后从调用该函数的任何主程序或过程(子例程或函数)中“使用”该函数。这样,调用程序或过程将知道函数的接口并生成正确的代码。在 Fortran 术语中,接口是显式的。如果该函数是从同一模块中的过程调用的,则不必“使用”它,因为模块中的过程相互了解。有关示例,请参阅在 Fortran 90 中计算两个向量的叉积。通常不需要使用接口,除非您正在调用缺少源代码或使用另一种语言的过程,例如,

于 2011-07-11T21:36:47.777 回答