Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Membre du Club
    Inscrit en
    novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 84
    Points : 43
    Points
    43

    Par défaut programme basé sur deux fichiers - gfortran

    Bonjour,

    j'apprends le fortran et je m'exerce à la compilation d'un programme basé sur plusieurs fichiers de code. Le fichier principal s'appelle "fortran_test.f90", le second "secondProg.F90". Comme le montre le code ci-dessous, deux subroutines sont présentes. L'une est rédigée dans le fichier principal "fortran_test.f90", l'autre dans le fichier auxiliaire.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    programm fortran_test
    include "secondProg.F90"
    
    write(*,*) 'a first test'
    call outputTest
    call secondProg
    
    end programm fortran_test
    
    subroutine outputTest
    
    write(*,*) 'the output test'
    
    end subroutine outputTest


    Code :
    1
    2
    3
    4
    5
    6
    
    subroutine secondProg
    character(len=3) :: mychar01
    
    end subroutine secondProg

    Lorsque je compile le programme principal avec:
    Code :
    1
    2
    gfortran fortran_test.F90 -o mytest2
    J'obtiens une erreur:
    secondProg.f90:6.3
    Included at fortran_test.f90.2:

    End Subroutine secondProg
    1
    error:expecting end programm statement at (1)
    Par contre, lorsque je mets la fonction auxiliaire, ainsi que la commande "include" correspondante et le "call" correspondant en commentaires, ca fonctionne.

    Quelqu'un peut il me donner la syntaxe pour compiler? J'ai l'impression que c'est là que ca pêche. J'ai essayé de compiler séparément le fichier auxiliaire en préalable
    gfortran secondProg.f90 -c secondProg.o
    Mais ca ne change rien

    Je suppose que le probleme vient du compilateur et que ma syntaxe est fausse. Je travaille sour linux suse. version de gfortran: 4.7 (ou 4.6)

    merci pour toute aide

    oodbae

  2. #2
    Membre éprouvé
    Inscrit en
    mars 2007
    Messages
    361
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 361
    Points : 427
    Points
    427

    Par défaut

    Bonjour,

    L'instruction "include" indique un remplacement textuel; tu n'inclues pas "secondProg.F90" au bon endroit puisque tu essayes de le mettre à l'intérieur du programme principal, ce qui n'a pas de sens en Fortran, à moins d'utiliser la clause "contains", qui ne peut être mise qu'en fin du programme principal:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    program fortran_test
    
    write(*,*) 'a first test'
    call outputTest
    call secondProg
    
    contains
    
    include "secondProg.F90"
    
    end program fortran_test
    
    subroutine outputTest
    
    write(*,*) 'the output test'
    
    end subroutine outputTest
    A noter que l'utilisation de "contains" implique que la routine contenue peut accéder aux variables du programme principal (contrairement à la routine "outputTest"); tu trouveras les détails de ces subtilités et nuances dans tout bon cours Fortran90.

    Bonne continuation

  3. #3
    Membre du Club
    Inscrit en
    novembre 2009
    Messages
    84
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 84
    Points : 43
    Points
    43

    Par défaut ca marche

    Merci, ca marche à présent.

    J'avais cherché dans le cours mis en ligne sur developpez.com, publié par qqn de l'IDRIS, mais je n'ai vu que la description de "include". Je regarderai une deuxième fois.

    encore merci.

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •