У меня есть производный тип:
module foo
type bar
integer, allocatable, dimension(:) :: data
end type bar
end module foo
Теперь я хотел бы выделить данные bar
внутри подпрограммы без явного интерфейса:
program main
use foo
type(bar) :: mybar
call alloc_my_bar(10,mybar)
print*, mybar
end program
subroutine alloc_my_bar(n,mybar)
use foo
type(bar) :: mybar
integer :: n
allocate(mybar%data(n))
mybar%data = 42
end subroutine alloc_my_bar
Кажется, это прекрасно работает с ifort
, но я знаю, что если бы mybar не был частью пользовательского типа, мне понадобился бы явный интерфейс... Устраняет ли размещение выделяемого массива в определяемом пользователем типе необходимость в явном интерфейс? С какой версией стандарта фортрана совместим этот код (F90, F95, F2003...), если таковой имеется?
foo
уже имеет кучу связанных с ним подпрограмм. На самом деле моя программа устроена так, что модульfoo
имеет типbar
и подпрограммуalloc_bar
и другие подпрограммы. Затем мой код вызывает какую-то другую функцию (передаваяbar
), вызываетalloc_bar
и затем заполняет данные. Вопрос не в том, будет ли работатьalloc_bar
, а в том, увидит ли изменения и основной код. - person mgilson   schedule 21.02.2013