Обобщающие правила для переменных и функций в содержащихся подпрограммах
У меня проблемы с пониманием, почему переменная (i
) объявленный в подпрограмме виден в отдельной подпрограмме, но это не так для функции (fie
), что приводит к ошибке компиляции. Я искал ответ, а также пытался выяснить, смогу ли я найти что-то в стандарте Fortran 95, но тщетно.
Я написал небольшой пример программы:
program pgm
call a
end
subroutine a
implicit none
integer :: i
double precision :: fie
i = 7
call b
!write(*,*) fie(9)
contains
subroutine b
double precision :: x
!double precision :: fie
x = i
x = x + fie(i)
write(*,*) x
end subroutine
end subroutine
double precision function fie(ii)
implicit none
integer, intent(in) :: ii
fie = ii
end function
При компиляции этого с gfortran под cygwin (gfortran 5.4.0) я получаю следующее сообщение об ошибке:
$ gfortran aa.f90
aa.f90:20:15:
x = x + fie(i)
1
Error: ‘fie’ at (1) is not a function
При включении любой из закомментированных строк программа компилируется и работает правильно.
Я видел похожее сообщение об ошибке при использовании компилятора Intel (Intel Fortran 12.1.7.367, действительно довольно старый).
Это выглядит какfie
должен быть доступен либо в содержащейся подпрограмме, либо должен использоваться в подпрограмме, но, как уже было сказано, я не смог найти ответ в сети или в стандарте Fortran 95 (или, возможно, я не искал нужные слова ).
Любое объяснение?