gfortran:如果在第二个模块中使用,则找不到模块

时间:2018-03-13 17:58:10

标签: fortran

我正在尝试使用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,反之亦然?谢谢您的帮助。

1 个答案:

答案 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 ++)中包含头文件的目的不同。