fortran向量值函数给出了总线错误

hat*_*rix 1 fortran

以下程序给我一个总线错误......任何想法为什么?

  program main
  integer, parameter :: n = 3
  integer, dimension(n) :: out

  out = rep(1,n)
  print *, (out(i), i=1,n)

  end program

  function rep(x,n)
  integer :: x
  integer :: n
  integer, dimension(n) :: rep

  do i=1,n
     rep(i) = x
  enddo

  end function
Run Code Online (Sandbox Code Playgroud)

我认为这与它有关,integer, dimension(n) :: rep但我不确定为什么会这样.

ban*_*ish 5

您需要使接口显式化,以确保Fortran在调用它时知道rep是什么.将您的rep函数放入一个单独的文件中的模块,如下所示:

  module m_rep

  contains

  function rep(x,n)

  implicit none

  integer :: x
  integer :: n
  integer :: i
  integer, dimension(n) :: rep

  do i=1,n
     rep(i) = x
  enddo

  end function

  end module
Run Code Online (Sandbox Code Playgroud)

然后在主程序中使用该行的模块

  use m_rep
Run Code Online (Sandbox Code Playgroud)

另外,使用隐式none来确保正确声明所有变量.

  • 接口可以工作,但缺点是必须维护它以与过程定义(函数或子例程)保持一致.如果更改过程,则必须更改呼叫和界面.如果您将过程放在一个模块中,那么"使用"该模块的任何程序或过程都知道该接口,并且程序员无需进一步努力即可获得过程和调用之间的一致性检查.在这种情况下,如果更改过程,则只需更改呼叫.减少工作量,减少错误发生的可能性. (2认同)