Почему нельзя инициализировать переменные INTENT (OUT) или RESULT в Fortran? - PullRequest
1 голос
/ 14 сентября 2011

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

1 Ответ

10 голосов
/ 14 сентября 2011

TYPENAME :: variable = somevalue

не делает то, что вы думаете, что делает. А именно, это поместит в переменную неявный атрибут SAVE с начальным значением somevalue. SAVE не имеет смысла для аргументов процедуры, поэтому это не разрешено.

Итак, что вы хотите, это


TYPENAME :: variable
variable = somevalue

, который будет устанавливать значение на somevalue каждый раз, когда процедура выполняется.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...