假设我有一个接受两个数组作为输入的子例程。一个给予意图(in),另一个给予意图(out)。后者是以任意方式从前者衍生而来的。但是,如果我通过两个虚拟参数的相同实际参数会怎样?一般来说,结果不会是子程序的意图。查看下面的代码片段。Fortran:将相同的数组作为两个伪参数传递给子例程
问题是,编译器似乎并不在乎,即使我已经给出了意图标志。我正在使用英特尔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
谢谢,清除它。不幸的是,英特尔Visual Fortran对此没有提出警告。我想唯一的解决方案是使用适当的子程序调用的纪律。 – bdforbes
您如何比较两个输入数组的位置?这是一件安全的事情吗?另外,显然F2003没有实现loc函数,是否有等价的? – bdforbes