IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Fortran Discussion :

fonctionnement "call" pour les subroutines


Sujet :

Fortran

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut fonctionnement "call" pour les subroutines
    Bonjour,

    je me mets juste au Fortran et je viens de lire la FAQ. La section "subroutine" est très bien expliqué, j'ai enfin compris. MERCI BEAUCOUP à la personne qu'il l'a rédigée

    Il y a juste un truc que je n'ai pas trop compris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    argument sortant : integer,intent(out)::p1
    argument entrant : integer,intent(in)::p2
    argument entrant/sortant : integer,intent(inout)::p3
    --> il y a un truc qui m'a quand même étonné (mois qui suit habitué au C) : une variable modifiée dans une subroutine sera aussi modifiée dans le programme principal sans que l'on est déclaré de pointeur ??? la FAQ semble indiquer clairement oui avec les intent "out" et "inout" mais c'est quand même étonnant car on a pas déclaré de pointeurs ?

    --> les intent ne sont apparemment pas obligatoire mais si on ne les met pas quel sera leur comportement par défaut : "inout" ?
    c'est à dire que l'on peut les modifier ?

    merci pour vos précisions/confirmations

  2. #2
    Membre averti
    Homme Profil pro
    [SciComp]
    Inscrit en
    Août 2013
    Messages
    134
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : [SciComp]

    Informations forums :
    Inscription : Août 2013
    Messages : 134
    Points : 323
    Points
    323
    Par défaut
    Cher membreComplexe12,

    1) Bien vu, le comportement par défaut du fortran est de passer les arguments par référence. En C, le comportement par défaut est de passer par valeur, et on est obligé de travailler avec des pointeurs et de passer les adresses des objets en argument si on veut les modifier.
    Complément: il n'y a pratiquement pas besoin d'utiliser des pointeurs en Fortran, sauf dans des besoins particuliers de type listes chaînées (allocation dynamique d'entités elles-même allocatable pour certaines applications de calcul (vécues), ou encore des cas de polymorphisme plus exotique -à tort ou à raison, pour ce dernier cas, ce n'est pas vers fortran que je me dirigerais pour ce faire, encore moins vers C avec lequel je ne vois même pas comment faire, mais plutôt vers C++-).
    A noter que le C++ implémente le passage par référence contrairement au C.

    2) Indeed, les "intent" sont optionels, le comportement par défaut devant se rapprocher du plus permissif, i.e. "inout". Il est très sain de déclarer les "intent". Leur rôle est double: ça a le mérite de demander au compilateur de faire les vérifications imposées par l'attribut intent, donc de réduire les possibilités d'erreurs d'une part; et c'est de la documentation gratuite du code d'autre part, ce qui n'est pas négligeable non plus.
    Donc oui on peut les modifier.
    Complément: Après, j'avoue ne pas savoir ce que le standard a prévu dans le cas où on passe une rvalue comme "5" en argument et qu'on s'en serve comme lvalue dans la routine... J'imagine que tous les compilateurs, en l'absence de déclaration d'intentions, ne font pas ces checks, alors que dans le cas des déclarations d'intentions explicites, les checks sont effectués.

    En espérant t'avoir aidé,
    xflr6

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    énorme aide, merci beaucoup!!!
    à bientôt

+ 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