mgi*_*son 5 fortran subroutine
考虑:
program main
real, allocatable, dimension(:) :: foo
integer n
n=10
call dofoo(foo,n,1)
allocate(foo(n))
call dofoo(foo,n,0)
end program main
subroutine dofoo(foo,n,mode)
real foo(n)
integer i,n,mode
if(mode.eq.1)then
n=6
return
endif
do i=1,n
foo(i)=i
enddo
return
end subroutine dofoo
Run Code Online (Sandbox Code Playgroud)
上面的代码有什么问题吗?(它适用于gfortran)我第一次传入一个未分配的数组,但是我没有触及它 - 标准中是否有任何可能导致它以系统相关方式运行的东西?
你差不多回答了自己的问题.是的,根据标准,如果您没有范围内的接口,则将未分配的可分配数组作为实际参数传递始终是非法的.
如果在范围内有接口,那么伪参数也是可分配的,这是合法的.
是的,我被它咬了.我的工作是在通话前分配到零大小.