2011-09-14 59 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

相关问题