我有这样的事情:
Module ModA
contains
subroutine FooA()
....
end subroutine
subroutine FooB()
....
end subroutine
end mofule ModA
Run Code Online (Sandbox Code Playgroud)
我可以将两个子程序分别拆分在一个单独的文件中,并且仍然属于同一个模块吗?
是的。你有两个选择。
第一种是在模块子程序部分中简单地包含带有子程序源的文件。
! Module.f90
MODULE ModA
CONTAINS
INCLUDE 'FooA.f90'
INCLUDE 'FooB.f90'
END MODULE ModA
! FooA.f90
SUBROUTINE FooA()
!...
END SUBROUTINE FooA
! FooB.f90
SUBROUTINE FooB()
!...
END SUBROUTINE FooB
Run Code Online (Sandbox Code Playgroud)
第二种选择是将每个子程序移动到它自己的子模块中。
MODULE ModA
INTERFACE
MODULE SUBROUTINE FooA()
END MODULE SUBROUTINE FooA
MODULE SUBROUTINE FooB()
END MODULE SUBROUTINE FooB()
END INTERFACE
END MODULE ModA
! FooA.f90 (or whatever name you prefer)
SUBMODULE (ModA) FooA_submodule
CONTAINS
MODULE PROCEDURE FooA
!...
END PROCEDURE FooA
END SUBMODULE FooA_submodule
! FooB.f90 (or whatever name you prefer).
SUBMODULE (ModA) FooB_submodule
CONTAINS
MODULE PROCEDURE FooB
!...
END MODULE PROCEDURE FooB
END SUBMODULE FooB_submodule
Run Code Online (Sandbox Code Playgroud)
但是您需要使用支持 Fortran 2008 子模块功能的 Fortran 编译器来实现此选项。