У меня есть следующая программа
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
должна быть такой же, как в вызывающей программе?