以下程序给我一个总线错误......任何想法为什么?
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
我认为这与integer, dimension(n) :: rep
有关,但我不确定为什么会发生这种情况。
答案 0 :(得分: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
然后使用行
在主程序中使用该模块 use m_rep
另外,使用隐式none来确保所有变量都被正确声明。
答案 1 :(得分:1)
仍然不能完全回答你的问题,但也许子程序调用而不是函数对你有用:
program main
implicit none
integer :: i
integer, parameter :: n = 3
integer, dimension(n) :: out
call repeat(1,3,out)
print *, (out(i), i=1,n)
end program
subroutine repeat(x,n,y)
implicit none
integer :: i
integer,intent(in) :: x,n
integer,dimension(n),intent(out) :: y
do i=1,n
y(i) = x
enddo
endsubroutine
希望有人会为你的功能提出答案。我遇到的问题是Fortran不会让你做类似的事情:
integer,external :: rep(n)