2014-01-28 5 views
3

I는 다음과 같습니다 기능이 있습니다선언 및 지역 변수의 초기화는

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

SAVE을 의미 ... 나중에 코드에서 변수를 초기화합니다. F2008에서 5.2.3

공통 블록에없는 변수의 명시 적 초기화는 명시 적 사양으로 확인할 수있는 SAVE 특성을 의미합니다.

당신은 로컬 변수를 사용할 수 있지만, 단지

real t 
t = 0 

초기 환경되지 않는.

+0

나는 당신이'진짜 :: t '를 의미한다고 생각하지만, 고마워, 그 작품! – hertzsprung

+3

글쎄,'::'은 스타일 일 때, 필요한 경우를 제외하고. 이 경우 필수는 아니지만 초기화가 필요합니다. 즉, 어떤 사람들은 매번 일관성을 위해 그것을 선호합니다. – francescalus

4

주의! 선언 중에 변수 초기화는save 속성을 의미합니다! 이것은 pure 조건을 위반합니다. 자세한 내용은 here을 참조하십시오.

더 나은 현대 포트란 초기화에서

-1

REAL :: t = 0.0pure이 아니며 처음으로 함수가 호출되기 때문에 적용됩니다.