【发布时间】:2014-09-15 11:27:10
【问题描述】:
假设有一个向量:
REAL(KIND=dp), DIMENSION(maxn) :: rho
在初始子程序中分配值(连同dp 和maxn)并从主程序调用。
然后主程序调用一个包含(不同)子例程的模块来进化rho。 rho 的子程序参数定义为:
SUBROUTINE sum_density(a, b, c, ....., rho)
在这个子程序中,rho 被声明为:
REAL(KIND=dp), DIMENSION(maxn), INTENT(OUT) :: rho
然而,在与rho 关联的任何值之前,代码包含以下行:
foo1= foo2*foo3(i)/rho(i)
我原以为模块子例程无法访问主程序中定义的rho。我希望编译器会抱怨并要求将意图更改为 (INOUT) 或说类似 rho 的内容未定义。即使我将其更改为(INOUT),结果也没有区别。模块子例程必须在主程序中访问 rho 的值并使用它,即使意图声明为 OUT。
我的问题是 - 在这种情况下,使用 INTENT(OUT) 和 INTENT(INOUT) 有什么区别?
【问题讨论】:
-
你最后一句真的是指
INTENT(IN)吗? -
糟糕,感谢您指出这一点 - 已修复
标签: module scope fortran subroutine