写一个subroutine,如果形参给定数组元素个数,可以正常编译运行
subroutine abc(a)
implicit none
integer :: a(3)
a(1)=1
a(2)=2
end subroutine
program main
implicit none
integer :: a(3)=(/5,5,5/)
call abc(a)
write(*,*) a
end
如果在subroutine里面写数组元素个数,会产生错误
subroutine abc(a)
implicit none
integer :: a(:)
a(1)=1
a(2)=2
end subroutine
program main
implicit none
integer :: a(3)=(/5,5,5/)
call abc(a)
write(*,*) a
end
错误信息:
$ gfortran 2.f90
2.f90:14:12:
call abc(a)
1
Error: Explicit interface required for ‘abc’ at (1): assumed-shape argument
解决方法1:
将过程放在模块中创建显示接口:
module mm
contains
subroutine abc(a)
implicit none
integer :: a(:)
a(1)=1
a(2)=2
end subroutine
end module
program main
use mm
implicit none
integer :: a(3)=(/5,5,5/)
call abc(a)
write(*,*) a
end
解决方法2:
创建接口:
subroutine abc(a)
implicit none
integer :: a(:)
a(1)=1
a(2)=2
end subroutine
program main
implicit none
interface
subroutine abc(a)
implicit none
integer :: a(:)
end subroutine abc
end interface
integer :: a(3)=(/5,5,5/)
call abc(a)
write(*,*) a
end