我正在尝试使用gfortran编译以下示例代码:
module a
use b
implicit none
save
real :: c = 2.5
end module a
module b
use a
implicit none
save
real :: d = 1.5
end module b
program moduletest
use a
use b
implicit none
print*, c
print*, d
end program moduletest
其实我不明白以下错误信息: moduletest.f90:2:6:
use b
1
Fatal Error: Can't open module file ‘b.mod’ for reading at (1): No such file or directory
compilation terminated.
为什么我不能在模块a中使用模块b,反之亦然?谢谢您的帮助。
答案 0 :(得分:2)
不允许模块的循环依赖。该标准规定如下:
<强> 11.2.2 The USE statement and use association 强>
USE语句指定使用关联。 USE声明是一个 引用它指定的模块。当时的USE声明 处理后,指定模块的公共部分应为 可用。模块不得直接引用或引用自身 间接的。
根据您的示例,如果模块 // example
let ls = "This is\nSome text"
let t = ls.replacingOccurrences(of: "\n", with: " ")
print("t", t)
// output is "This is Some text"
可用,则只能构建模块b
(变为可用)。但是,如果模块a
可用,则只能构建模块a
。因此,模块b
间接引用自身。 (a
需要a
,其中b
需要a
,其中b
需要a
,其中......无限期)
重要的是要认识到use
语句与在其他语言(如C或C ++)中包含头文件的目的不同。