我什么时候必须在模块中使用 CONTAINS?

M.E*_*.E. 3 fortran

我定义了以下模块:

module data_model_2

        implicit none

        ! -------------------
        ! TYPE DEFINITION
        ! -------------------
        type :: type1_record
                integer                 :: month
                integer                 :: day
                integer                 :: year
                integer                 :: hour
                integer                 :: minute
                integer                 :: second
                integer                 :: value1
                integer                 :: value2
        end type
        type :: timestamp_record
                integer                 :: year
                integer                 :: month
                integer                 :: day
                integer                 :: hour
                integer                 :: minute
                integer                 :: second
        end type

end module
Run Code Online (Sandbox Code Playgroud)

我已经看到,modules应使用条款contains。当模块仅包含派生类型定义时是否需要该子句?

如果是这样,它应该包括在implicit none什么地方,在?之后还是之前?

如果模块还包括函数或过程,派生类型定义是在contains子句之前还是之后?

我很想知道这在 Fortran 95 和 Fortran 03 中是如何工作的。

fra*_*lus 5

contains声明说,接踵而来的是内部的子程序模块子程序。只有那些东西可能出现在模块的contains和之间end

在 Fortran 2008 之前,不允许有“空包含”部分:如果您在 Fortran 90、95、2003 中没有模块子程序,那么您可能没有contains. 在 Fortran 2008+ 中,虽然不是必需的,但没有它们,您可能会拥有它。

contains本质上是模块中允许的最后一件事:所有不是内部/模块子程序的模块范围定义必须在此之前。一个implicit语句必须是在模块范围很早就:只有模块声明,useimport(在那些支持极少数情况下)可能会preceed它。