1. #1
    Membre du Club
    Inscrit en
    novembre 2009
    Messages
    93
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 93
    Points : 57
    Points
    57

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    subroutine secondProg
    character(len=3) :: mychar01
     
    end subroutine secondProg

    Lorsque je compile le programme principal avec:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    386
    Détails du profil
    Informations forums :
    Inscription : mars 2007
    Messages : 386
    Points : 442
    Points
    442

    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    93
    Détails du profil
    Informations forums :
    Inscription : novembre 2009
    Messages : 93
    Points : 57
    Points
    57

    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.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo