我有一个看起来像这样的函数:
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属性即可。那么我做错了什么?
答案 0 :(得分:6)
在现代Fortran初始化意味着SAVE
。从F2008 5.2.3
显式初始化不在公共块中的变量意味着SAVE属性,可以通过显式规范来确认。
您可以使用局部变量,但只需
real t
t = 0
这不是初始化。
答案 1 :(得分:4)
小心!在声明期间初始化变量意味着 save
属性!这违反了pure
条件。有关详细信息,请参阅here。
最好稍后在代码中初始化变量......
答案 2 :(得分:-1)
REAL :: t = 0.0
不是pure
,因为它仅在第一次调用函数时生效。