【发布时间】:2020-12-30 14:29:28
【问题描述】:
我有一个大型源代码,其中模块中的子例程在module ... end module 语句之外定义(即不在contains 语句内部)。我在下面包含了一个简化的模块:
module core
implicit none
type :: disc_status
sequence
real*8 :: alpha1, alpha2, alpha3
end type disc_status
end module core
subroutine tester(input)
use core
type(disc_status), intent(in) :: input
print *, input%alpha1, input%alpha2, input%alpha3
end subroutine tester
这是一个使用模块和子程序的示例程序:
program flyingDiscSimulator
use core
implicit none
type(disc_status) :: disc
disc%alpha1 = 1.1D0
disc%alpha2 = 1.2D0
disc%alpha3 = 1.3D0
call tester(disc)
print *, 'it works'
end program flyingDiscSimulator
通常,我最终会看到子例程在模块中使用 contains 语句:
module core
implicit none
type :: disc_status
sequence
real*8 :: alpha1, alpha2, alpha3
end type disc_status
contains
subroutine tester(input)
type(disc_status), intent(in) :: input
print *, input%alpha1, input%alpha2, input%alpha3
end subroutine tester
end module core
但是,上面引用的程序文件不需要任何更改即可使用在模块中包含子例程的任何一种方式(无论如何都使用 gfortran)。因此,两种解决方案之间的模块或子程序的使用似乎没有区别。 这两种风格之间是否存在“幕后”差异?
【问题讨论】:
标签: fortran