2014-01-28 42 views
3

我有一個看起來像這樣的功能:宣言和局部變量初始化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 

gfortran 4.8.1告訴我,

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

據我瞭解,我應該只要它們沒有SAVE屬性,就可以在純函數中使用局部變量。那麼我做錯了什麼?

+0

http://stackoverflow.com/questions/3352741/fortran-assignment-on-declaration-and-save-attribute-gotcha –

回答

6

在現代的Fortran初始化意味着SAVE。從F2008開始5.2.3

不在公共塊中的變量的顯式初始化意味着SAVE屬性,這可以通過顯式指定來確認。

您可以使用局部變量,只是

real t 
t = 0 

未初始化。

+0

我認爲你的意思是'real :: t',但是,謝謝,這是有效的! – hertzsprung

+3

嗯,'::'是一種風格的東西,除非需要。在這種情況下它不是必需的,但是它是初始化的。也就是說,有些人每次都更喜歡它的一致性。 – francescalus

4

當心!聲明期間初始化變量意味着save屬性!這違反了pure的條件。詳情請參閱here

更好的初始化變量在後面的代碼上...

-1

REAL :: t = 0.0不是pure,因爲它只在第一次調用該函數時生效。