我想知道是否可以声明变量并将声明转移到另一个子程序或程序(因此变为全局)
例如
program main
implicit none
call mysub
print *, x
end program main
subroutine mysub
implicit none
integer, parameter :: x = 1
end subroutine mysub
将打印" 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
块方法的教程,我建议你忽略它们并避免在新代码中使用它们。