Fortran纯函数中局部变量的声明和初始化

Fortran纯函数中局部变量的声明和初始化,fortran,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

我有一个函数如下所示:

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
gfortran 4.8.1通知我

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

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

当心!声明期间初始化变量意味着
save
属性!这违反了
pure
条件。有关详细信息,请参阅


最好稍后在代码中初始化变量…

在现代Fortran初始化提示下
保存
。从F2008 5.2.3开始

不在公共块中的变量的显式初始化意味着SAVE属性,这可以由显式规范确认

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

real t
t = 0

这不是初始化。

REAL::t=0.0
不是纯的,因为它只在第一次调用函数时生效。

我想你的意思是
REAL::t
,但是,谢谢,这是有效的!嗯,
是一种风格,除非需要。在这种情况下,它不是必需的,但在初始化时它是必需的。也就是说,有些人喜欢每次都保持一致性。