Considerare:C'è qualcosa di sbagliato nel passare un array non allocato a una routine senza un'interfaccia esplicita?
program main
real, allocatable, dimension(:) :: foo
integer n
n=10
call dofoo(foo,n,1)
allocate(foo(n))
call dofoo(foo,n,0)
end program main
subroutine dofoo(foo,n,mode)
real foo(n)
integer i,n,mode
if(mode.eq.1)then
n=6
return
endif
do i=1,n
foo(i)=i
enddo
return
end subroutine dofoo
qualcosa che non va con il codice di cui sopra? (Funziona con gfortran) Passo per la prima volta in un array non assegnato, ma non lo tocco - C'è qualcosa nello standard che potrebbe causare questo comportamento in modo dipendente dal sistema?
Grazie. Ero preoccupato che questo fosse il caso. Non sapevo cosa lo standard avesse da dire (sono molto familiare con lo standard f77, ma non ho letto la maggior parte dello standard f90) – mgilson
Come nota a margine, il codice sopra funziona con gfortran (dopo I modificato i bug) – mgilson
Il passaggio attorno agli array allocabili non è stato risolto fino a quando non si è passati allo standard F95. Lo stato e le dimensioni allocate sono _part_ della variabile array allocabile. Ciò è importante perché cose come intent (in) o intent (out) non ti dicono solo se _values_ dell'array può cambiare, ma se le dimensioni o lo stato di allocazione possono cambiare. Senza un'interfaccia esplicita, un programma dovrebbe assumere il peggio quando passa un array allocabile - potrebbe non conoscere più le dimensioni al momento del ritorno. Questa è un'enorme penalità per le prestazioni nel solito caso, quindi è stato deciso che è necessario avere un'interfaccia esplicita. –