假设我有一个子程序,它接受两个数组作为输入。其中一个是给定的intent(in),另一个是给定的intent(out)。后者以任意方式从前者派生而来。但是,如果我为这两个虚拟参数传递相同的实际参数会怎样呢?一般情况下,子程序的结果将不是预期的结果。请参见下面的代码片段。
问题在于,编译器似乎并不关心,即使我已经给出了intent标志。我正在使用Intel Visual Fortran Composer 12,并启用了所有诊断。是否有更好的编写子程序的方法,或者我漏掉了某些编译器选项,可以使代码更加安全?
问题在于,编译器似乎并不关心,即使我已经给出了intent标志。我正在使用Intel Visual Fortran Composer 12,并启用了所有诊断。是否有更好的编写子程序的方法,或者我漏掉了某些编译器选项,可以使代码更加安全?
module foo
contains
subroutine sub_a()
implicit none
real::array(10,10)
call sub_b(array,array)
end subroutine
subroutine sub_b(array1,array2)
implicit none
real,intent(in)::array1(10,10)
real,intent(out)::array2(10,10)
!array2 is derived from array1 somehow
end subroutine
end module foo