Supponiamo di avere una subroutine che accetta due matrici come input. Uno è dato intento (in) e l'altro è dato intento (fuori). Quest'ultimo è derivato dal primo in modo arbitrario. Tuttavia, cosa succede se passo lo stesso argomento effettivo per entrambi gli argomenti fittizi? In generale, il risultato non sarà ciò che è stato inteso dalla subroutine. Vedi lo snippet di codice qui sotto.Fortran: passa lo stesso array di due argomenti fittizi alla subroutine
Il problema è che il compilatore sembra non curarsene, anche se ho dato delle flag di intent. Sto usando Intel Visual Fortran Composer 12, con tutti i dati diagnostici. C'è un modo migliore di codificare la subroutine, o qualche opzione del compilatore che mi manca, per rendere il codice più sicuro?
module foo
contains
subroutine sub_a()
implicit none
real::array(10,10)
call sub_b(array,array)
end subroutine
subroutine sub_b(array1,array2)
implicit none
real,intent(in)::array1(10,10)
real,intent(out)::array2(10,10)
!array2 is derived from array1 somehow
end subroutine
end module foo
Grazie, che libera in su. È sfortunato che Intel Visual Fortran non avvisa per questo. Immagino che l'unica soluzione sia la disciplina nell'usare le chiamate di subroutine appropriate. – bdforbes
Cosa ne pensi di confrontare la posizione dei due array immessi? È una cosa sicura da fare? Inoltre, apparentemente F2003 non implementa la funzione loc, esiste un equivalente? – bdforbes