question de visibilité d'une routine externe, depuis une routine dans un module.
Bonjour, je ne comprends pas le comportement suivant en terme de visibilité de variable et j'aimerais bien que quelqu'un veuille bien m'éclairer...
Quand une routine qui est dans un module appelle une autre routine, externe au module, je constate que je ne peux pas passer de tableau en argument.
Par exemple, j'ai le module "test" ci-dessous (dans le fichier test.f) ainsi que le programme principal (main.f) et une routine externe() (fichier externe.f)
J'obtiens la sortie ci-dessous alors que je m'attendais à la même sortie pour les 2 routines...
TAB INTERNE = 1 2 3 4 5 6 7 8 9 10
TAB EXTERNE =
Et ce qui en dehors de cette incompréhension me surprend encore plus, c'est que si je mets une autre dimension pour le tableau (9 au lieu de 10 par exemple)
ALORS, ca plante sur un signal SIGSEGV !!! (alors que ça ne plante pas avec 10 !!!!!)
Merci pour votre aide...
Voici pour LE MODULE : test.f :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
|
MODULE TEST
IMPLICIT NONE
INTEGER, DIMENSION(:),ALLOCATABLE :: TAB
CONTAINS
SUBROUTINE CHECK_IT
ALLOCATE(TAB(10))
TAB=(/(i,i=1,10)/)
CALL INTERNE(TAB)
CALL EXTERNE(TAB)
DEALLOCATE(TAB)
END SUBROUTINE CHECK_IT
SUBROUTINE INTERNE(ARRAY)
IMPLICIT NONE
INTEGER, INTENT(INOUT),DIMENSION (:) :: ARRAY
WRITE(*,*) 'TAB INTERNE = ', ARRAY
END SUBROUTINE INTERNE
END MODULE |
main.f:
Code:
1 2 3 4 5 6
|
PROGRAM MAIN
USE TEST
IMPLICIT NONE
CALL CHECK_IT
END PROGRAM |
externe.f
Code:
1 2 3 4 5 6
|
SUBROUTINE EXTERNE(ARRAY)
IMPLICIT NONE
INTEGER, INTENT(INOUT),DIMENSION (:) :: ARRAY
WRITE(*,*) 'TAB EXTERNE = ', ARRAY
END SUBROUTINE EXTERNE |
pour compiler, je fais:
Code:
1 2 3 4
|
gfortran -c test.f
gfortran -c -I./ *.f
gfortran -o exec *.o |