サブルーチンで宣言された変数(i
)が含まれているサブルーチンでなぜ表示されるのか理解できない問題があります。コンパイルエラー。私は答えを探して、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
cygwinの下のgfortranでこれをコンパイル(のgfortran 5.4.0)私は、次のエラーメッセージが出ます::のいずれかを有効にする場合
$ gfortran aa.f90
aa.f90:20:15:
x = x + fie(i)
1
Error: ‘fie’ at (1) is not a function
を
は、私は小さなプログラム例を書きましたプログラムがコンパイルして正しく実行するコメント行。インテルコンパイラ(インテルFortran 12.1.7.367、確かにかなり古いもの)を使用すると、同様のエラーメッセージが表示されました。
fie
は、含まれているルーチンか、包括的なサブルーチンで使用する必要がありますが、netやFortran 95標準で答えが見つからない正しい言葉を求めていない)。
説明はありますか?これは手続きで、私はローカル変数を宣言していないです:
モジュールを使用するほうがよいとわかっていますが、パーツが拡張されている既存のコードベースの一部です(他のものによって)。 – albert