在Fortran PURE FUNCTION中声明和初始化局部变量

her*_*ung 4 fortran

我有一个看起来像这样的函数:

PURE FUNCTION simulate(initial_state, time_specification)
        TYPE(ocean), INTENT(IN) :: initial_state
        TYPE(simulation_time), INTENT(IN) :: time_specification
        TYPE(ocean) :: simulate
        REAL :: t = 0.0      
        ! etc
END FUNCTION simulate
Run Code Online (Sandbox Code Playgroud)

gfortran 4.8.1告诉我

 REAL :: t = 0.0
                1
Error: Initialization of variable at (1) is not allowed in a PURE procedure
Run Code Online (Sandbox Code Playgroud)

据我了解,我应该能够在纯函数中使用局部变量,只要它们没有SAVE属性.那么我做错了什么?

fra*_*lus 7

在现代Fortran初始化意味着SAVE.从F2008 5.2.3

不在公共块中的变量的显式初始化意味着SAVE属性,其可以通过显式规范来确认.

您可以使用局部变量,但只是

real t
t = 0
Run Code Online (Sandbox Code Playgroud)

这不是初始化.

  • 嗯,`::`是一种风格的东西,除非它是必需的.在这种情况下不需要它,但初始化它是.也就是说,有些人每次都更喜欢它的一致性. (4认同)

Ale*_*ogt 5

谨防!变量声明在初始化暗示save属性!这违反了pure条件。有关详细信息,请参见此处

稍后再在代码中更好地初始化变量...