2011-09-14 5 views
1

このようにnLinesとnIOsttsを初期化できないため、Gfortranは次のコードをコンパイルできません。最初に宣言してから、必要な初期値を設定するコードに2行追加する必要がありました。FORTRAN:INTENT(OUT)またはRESULT変数を初期化できないのはなぜですか?

なぜこのように機能しますか?おそらくINTENT(OUT)を使用すると、関数がデータを格納する変数がすでに存在するため(つまりFortranのサブルーチンが参照によって動作するかどうかは今は思い出せません)、RESULT変数むしろ不必要と思われる。これはコンパイラ固有のものか、それとも一般的なFortranの特性ですか?

機能LinesInFile(NUnitの、nIOstts)結果(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機能

答えて

10
 

TYPENAME :: variable = somevalue 
 

は、あなたはそれがないと思う何をしません。つまり、変数に暗黙のSAVE属性が設定され、初期値はsomevalueとなります。 SAVEは手続き引数には意味がないため、許可されていません。

だから何をしたいの手順を実行したときにsomevalueにするたびに値を設定します


TYPENAME :: variable 
variable = somevalue 

です。

+1

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

関連する問題