Fortran把未分配的数组传入子过程,在子过程中分配空间

问题:未分配内存的动态数组,如何作为参数传递到子函数,并在子函数中分配内存

Fortran把未分配的数组传入子过程,在子过程中分配空间_第1张图片

上面的写法会提示错误

||Error: Dummy argument 'ns' of procedure 'rd'  has an attribute that requires an explicit interface for this procedure|


解决方法

常用方法1,主程序里加入interface block

interface 
    subroutine rd(n,ns)
        integer :: n
        integer,allocatable :: ns( : )
    end subroutine rd
end interface

常用方法2,把子程序放在module里
module my_module
   contains
// 把rd的定义放进来
       subroutine rd(n,ns)
       ...
end module my_module

然后在主程序里,只需要调用module,就会自动定义子程序。
program main
   use my_module
   integer :: n
   integer, allocatable :: ns( : )
   call rd(n,ns)
   ...

end program


你可能感兴趣的:(Fortran)