假设我们有这个变量定义
Real*8, Dimension(:), Allocatable :: dblA Allocate (dblA(1000))
现在我调用这个子程序:
Call MySub(dblA)
其中:
Subroutine MySub(dblA) Real*8, INTENT(Out), DIMENSION(1000) :: dblA End
这种做法有什么副作用?我应该避免这个吗?
如果在传递给子例程之前已经分配了数组,则子例程与allocatable-ness无关,效果与数组是静态的相同.在你向我们展示的片段中,没有什么可以反对,也没有练习避免.但是,这些片段实际上做得很少,很容易想到扩展它们以使这个建议无效的方法.
现在帮自己一个忙,改变吧
Real*8, INTENT(Out), DIMENSION(1000) :: dblA
至
Real*8, INTENT(Out), DIMENSION(:) :: dblA
这样无论传递的数组大小如何,子程序都能正常工作.使用dblA
虚拟和实际参数的名称可能也是一个坏主意,你只会迷惑自己.
并且real*8
,并且从来没有,是一种标准兼容的声明8字节实数的方式.关于这一点,请参阅SO上的众多问题和答案.