两个FORTRAN模块可以使用彼此的部分吗?

时间:2017-11-16 20:13:03

标签: module fortran circular-dependency

我知道FORTRAN中模块的循环依赖是被禁止的。但我想知道这种禁令有多强大。假设我有:

module mod1
   integer, public :: i,j,k
   use mod2, only: m
end module mod1

module mod2
   integer, public :: l,m,n
   use mod1, only: j
end module mod2

在我看来,这在逻辑意义上规避了循环,但这并不意味着标准允许它。它应该有用吗?

如果是这样,我编译时遇到问题,因为当然,mod1想要看mod2,反之亦然。有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

不,它不应该工作。该标准规定模块必须是“可用的”#34;当看到USE时。如果mod2还没有编译到"使用mod2"看到,构建将失败。 (有些编译器可能允许您使用稍后在同一源中定义的模块,有些则不允许。)您可以使用子模块(请参阅https://software.intel.com/en-us/blogs/2015/07/07/doctor-fortran-in-we-all-live-in-a-yellow-submodule)来实现您想要的 - 我不知道因为你发布的内容显然不能代表你的真实应用,但马克对单独模块的建议更容易理解。