为什么无法在Fortran中初始化INTENT(OUT)或RESULT变量?

Nor*_*ico 1 fortran initialization function

Gfortran不会让我编译以下代码,因为nLines并且nIOstts不能像这样初始化; 所以我必须先声明它们然后在代码中添加两行来设置它们所需的初始值.

为什么这样工作?也许因为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

END FUNCTION
Run Code Online (Sandbox Code Playgroud)

jan*_*neb 10


TYPENAME :: variable = somevalue

不会做你认为它做的事情.也就是说,这将在变量上放置一个隐含的SAVE属性,并带有初始值somevalue.SAVE对于过程参数没有意义,因此不允许这样做.

所以你想要的是


TYPENAME :: variable
variable = somevalue
Run Code Online (Sandbox Code Playgroud)

这将在somevalue每次执行过程时将值设置为.