如何通过具有私有语句的模块调用已使用模块的公共变量

时间:2016-01-13 07:46:55

标签: fortran

在我的Fortran代码中,我在模块中定义变量,我使用USE语句在主程序中使用它们。 为了限制访问我的模块的内容,默认情况下我将所有变量/函数/子例程声明为private,然后明确声明哪些是公共的。

当我想访问我在主程序中使用的模块的变量/函数/子例程时,这很有效,但是当模块mod1使用另一个模块mod2时,似乎所有mod2的变量/函数/子例程变为私有mod1,无法从主程序访问。

mod2公开发布我的公开声明的关键字是什么,以便我可以从主程序访问它们?

以下是我的问题的最低工作示例

main.f90时

program main
use mod1
implicit none
print*,publicvar
end program main

mod1.f90

module mod1
use mod2
private
end module mod1

mod2.f90

module mod2
private
integer, parameter, public :: publicvar = 1
end module mod2

运行示例:

>ifort mod2.f90 mod1.f90 main.f90 -o main
main.f90(6): error #6404: This name does not have a type, and must have an explicit type.   [PUBLICVAR]
  print*,publicvar
---------^

如果我删除private中的mod1语句,它会起作用,但这对我来说是不可接受的,因为我希望默认情况下我所有的变量/ functions / subroutines都保留在模块中。

1 个答案:

答案 0 :(得分:2)

mod1中使用PUBLIC语句,将mod2关联使用的内容标记为mod1的公共实体。

module mod1
  use mod2
  private
  public :: publicvar   ! from mod2
end module mod1