在Fortran语言中,为具有TARGET属性的伪参数的过程提供的参数不具有TARGET属性导致无效的代码。但是,当使用gfortran(5.1.0)或ifort(14.0.0)编译下面的代码时,不会检测到错误,程序的行为与实际具有TARGET属性的参数相同。当我说它是无效代码或者这是编译器缺陷时,我错了吗?将具有TARGET属性的参数提供给伪参数具有TARGET属性的过程
program pointerization
implicit none
integer, dimension(3) :: A
integer, dimension(:), pointer :: ptr_A
A = [1, 2, 3]
call pointerize(A, ptr_A)
print*, "A=", ptr_A
contains
subroutine pointerize(tab, ptr_tab)
integer, dimension(:), intent(in), target :: tab
integer, dimension(:), pointer :: ptr_tab
ptr_tab => tab
end subroutine
end program
仅供参考,您的观点在Fortran参考§C.9.6 中提及ftp://ftp.nag.co.uk/sc22wg5/N1601-N1650/N1601.pdf.gz – jorispilot