Fortran中的外部声明(全局)变量

时间:2015-11-20 17:38:14

标签: variables fortran global subroutine

我想知道是否可以声明变量并将声明转移到另一个子程序或程序(因此变为全局)

例如

program main
    implicit none
    call mysub
    print *, x
end program main

subroutine mysub
    implicit none
    integer, parameter :: x = 1
end subroutine mysub

将打印" 1"

这可能吗?我想这样做是因为我正在处理的程序有大量变量,除非必要,否则我宁愿避免复制。

1 个答案:

答案 0 :(得分:4)

在现代Fortran中最直接的方法是使用模块。

考虑

module globals
  implicit none
  integer :: x
end module globals

program main
  use globals
  implicit none
  call mysub
  print *,x
end program main

subroutine mysub
  use globals
  implicit none
  x = 1
end subroutine mysub

在此范例中,您可以在模块中指定“全局”变量,并在use模块中指定要访问它们的模块。

如果您只是使用它来声明容器(参数),您可以将其简化为:

module globals
  implicit none
  integer, parameter :: x=1
end module globals

program main
  use globals
  implicit none
  print *,x
end program main

实现此目标的旧方法涉及common块和include文件,这些文件声明了访问它们的每个过程。如果你找到一个处理common块方法的教程,我建议你忽略它们并避免在新代码中使用它们。