Fortran 全局变量
虽然我们在不同的子程序中使用同名的局部变量不会相互影响,但是有的时候也希望一些变量能在不同的子程序中共享使用,这类变量我们可以称之为全局变量。
Fortran 语言中全局变量必须使用 module
的方式单独定义。当在主程序或子程序中需要使用这些已定义的全局变量时,首先要使用 use <module 名>
来声明引用,并且该声明应在 implicit none
之前。如下所示,定义了两个整数类型的变量 nmin 和 nmax,以及实数类型的变量 tinitial 和 二维数组 amatrix。
module data1
integer nmin, nmax
real tinitial, amatrix(20, 30)
end module data1
示例 9 是一个完整的全局变量定义和使用的例子。可以看到,子程序并没有声明任何参数,而是利用定义的全局变量 xais 和 yais 来从主程序中传递值到子程序中。这里的程序执行顺序是:主程序 → 调用子程序 → 子程序中的打印 → 子程序修改 yais 变量 → 主程序中的打印 → 程序结束。所以最终的执行结果的第一行是子程序中打印还未修改的两个全局变量,而第二行是主程序中打印已被子程序修改的两个全局变量,符合预期效果。
!!! 示例 9
module global
real xais, yais
end module global
program stest4
use global
implicit none
xais = 5.0
yais = 100.0
call subr4
print *, xais, yais
end program stest4
subroutine subr4
use global
implicit none
print *, xais, yais
yais = 25.0
end subroutine subr4
!!! 执行结果
>>> 5.00000000 100.000000
>>> 5.00000000 25.0000000
有的时候子程序中可能并不需要 module 中定义的所有全局变量,只想引入几个有关的全局变量。在 Fortran 语言中可以用 only 的语法来限定引入的全局变量,如下所示。
use 模块名, only : 变量1, 变量2, ...
use global, only : yaxsis