私は次のプログラムを持っています
module test
contains
subroutine foo()
integer, allocatable :: a(:)
allocate(a(-5:5))
call bar(a)
print *, a
end subroutine
subroutine bar(a)
integer, intent(out) :: a(:)
a = 0
a(-4) = 3 ! here
a(2) = 3
end subroutine
end module
program x
use test
call foo()
end program
「ここ」でマークされた行で、私は何か間違ったことをしています。実際には、私が配列を受け取るとa
(-5 から +5 まで割り当てられた呼び出し元で)、呼び出し先は従来の番号付け (1 から n) を使用します。つまり、-4 を割り当てると、境界外の割り当てが行われます。bar
ルーチン内で、a
配列の番号付けが呼び出し元と同じでなければならないことをコンパイラーにどのように指示できますか?