Gfortran не позволит мне скомпилировать следующий код, потому что nLines
и nIOstts
не могут быть инициализированы таким образом; поэтому мне пришлось сначала объявить их, а затем добавить две строки в код, чтобы установить их начальные значения.
Почему это работает так? Возможно, с INTENT(OUT)
это имеет немного больше смысла, так как переменная, в которой функция будет хранить данные, уже существует (и я не помню сейчас, работали ли подпрограммы Fortran по ссылке или нет), но для переменной RESULT
это казалось бы довольно ненужным. Это специфично для компилятора или это общая характеристика Фортрана?
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