2011-09-14 60 views
1

Gfortran不會讓我編譯下面的代碼,因爲nLines和nIOstts不能像這樣初始化;所以我必須首先聲明它們,然後在代碼中添加兩行以設置其所需的初始值。FORTRAN:爲什麼不能初始化INTENT(OUT)或RESULT變量?

這是什麼工作?也許對於INTENT(OUT)來說,它更有意義,因爲函數將存儲數據的變量已經存在(現在我不記得fortran子例程是否通過引用工作),但對於RESULT變量似乎沒有必要。這是編譯器的特定情況,還是Fortran的一般特性?

FUNCTION LinesInFile(NUnit的,nIOstts)RESULT(nLines)

IMPLICIT NONE
INTEGER,INTENT(IN):: NUnit的
INTEGER,INTENT(OUT):: nIOstts = 0
INTEGER :: nLines = -1

DO WHILE(nIOstts.EQ.0)

READ(UNIT=nUnit,FMT='(A)',nIOstts) 
    nLines=nLines+1 

ENDDO

RETURN; END FUNCTION

回答

10
 

TYPENAME :: variable = somevalue 
 

沒有做什麼,你認爲它。也就是說,這會在變量上加上隱含的SAVE屬性,初始值爲somevalue。 SAVE對程序參數沒有意義,因此不允許。

所以,你想要的是


TYPENAME :: variable 
variable = somevalue 

將執行過程,當值每次都設置爲somevalue

+1

http://www.cs.rpi.edu/~szymansk/OOF90/bugs.html – Wildcat

相關問題