Обобщающие правила для переменных и функций в содержащихся подпрограммах

У меня проблемы с пониманием, почему переменная (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 (или, возможно, я не искал нужные слова ).

Любое объяснение?

Ответы на вопрос(1)

Ваш ответ на вопрос