programas - guia fortran
¿Hay algo de malo en pasar una matriz sin asignar a una rutina sin una interfaz explícita? (1)
Casi has respondido tu propia pregunta. Sí, según el estándar, siempre es ilegal pasar un conjunto asignable no asignado como un argumento real si no tiene una interfaz en el alcance.
Si tiene una interfaz en el alcance, solo es legal si el argumento ficticio también es asignable.
Y sí, me ha mordido. Mi trabajo ha sido asignar a tamaño cero antes de la llamada.
Considerar:
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
¿Hay algo mal con el código anterior? (Funciona con gfortran) Paso en una matriz no asignada la primera vez, pero no la toco. ¿Hay algo en el estándar que pueda hacer que esto se comporte de una manera dependiente del sistema?