用 -xalias=ftnpointer 编译以下示例
parameter (n=20)
integer, pointer :: a(:)
integer, target :: t(n)
interface
subroutine sub(a,b,n)
integer, pointer :: a(:)
integer, pointer :: b(:)
end subroutine
end interface
a => t
a = (/ (i, i=1,n) /)
call sub(a,a,n)
....
end
subroutine sub(a,b,n)
integer, pointer :: a(:)
real, pointer :: b(:)
integer i, mold
forall (i=2:n)
a(i) = transfer(b(i-1), mold)
编译器必须假设 a 和 b 可以重叠。
|
注意:在本例中,编译器必须假设 a 和 b 可以重叠,即使它们指向不同数据类型的数据。这在标准 Fortran 中是非法的。如果编译器能够检测到此种情况,它会发出警告。