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

C Discussion :

valeur retournée par une fonction


Sujet :

C

  1. #1
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut valeur retournée par une fonction
    Bonjour,

    Si une fonction quelconque doit retourner une valeur, j'ai deux possibilités:
    -soit j'utilise le return dans la fonction
    -soit j'utilise un des arguments de ma fonction (un pointeur), et donc cet argument sera "in out"

    La question que je me pose:
    Dans quels cas utiliser une méthode plutot que l'autre.

    En ce qui me concerne, j'ai l'habitude d'utiliser le return de la fonction pour une gestion des erreurs (savoir si la fonction a échoué ou pas, et ainsi savoir si mon argument "in out" est valide ou non)

    Mais je suis sur qu'on a tous des habitudes différentes, et je souhaite connaitre votre avis sur la question:

    dans quels cas utilisez vous le "return" de la fonction, et dans quel cas utilisez-vous un paramètre "in out" ?

    merci

  2. #2
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Biosox
    Si une fonction quelconque doit retourner une valeur, j'ai deux possibilités:
    -soit j'utilise le return dans la fonction
    -soit j'utilise un des arguments de ma fonction (un pointeur), et donc cet argument sera "in out"
    OK
    La question que je me pose:
    Dans quels cas utiliser une méthode plutot que l'autre.
    C'est selon les besoins. Pour une valeur, le return suffit. Pour plusieurs, un paramètre avec l'adresse d'un structure est pratique...
    En ce qui me concerne, j'ai l'habitude d'utiliser le return de la fonction pour une gestion des erreurs (savoir si la fonction a échoué ou pas, et ainsi savoir si mon argument "in out" est valide ou non)
    C'est effectivement une pratique courante qu'on retrouve dans la bibliothèque standard du C, dans POSIX.1 et la plupart des bibliothèques tierces... (Y compris la mienne).

  3. #3
    Membre actif Avatar de Biosox
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    298
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 298
    Points : 203
    Points
    203
    Par défaut


    d'autres avis?

  4. #4
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Un "Int/out" est aussi plus pratique pour la lisibilité des allocation/free étant donné que l'allocation se fera généralement dans la meme fonction que le free.
    Alors que dans le cas d'une valeur retourné tu va devoir désalouer ta variable ailleur comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    char * function_return() {
         char *x = malloc(...);
         return x;
    }
     
    void func(...) {
        char *x;
        x = funtion_return();
        free(x);
    }

  5. #5
    Membre actif Avatar de straasha
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Juillet 2004
    Messages
    149
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Transports

    Informations forums :
    Inscription : Juillet 2004
    Messages : 149
    Points : 295
    Points
    295
    Par défaut
    si en sortie j'ai un boolean, j'utilise le return, ainsi je peux appeler ma fonction directement dans un "if"

  6. #6
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par |PaRa-BoL
    Un "Int/out" est aussi plus pratique pour la lisibilité des allocation/free étant donné que l'allocation se fera généralement dans la meme fonction que le free.
    Alors que dans le cas d'une valeur retourné tu va devoir désalouer ta variable ailleur comme ca :
    Touchant de naïveté... D'autres langages nous enseignent l'usage de constructeurs et des destructeurs, ce qui rend le code plus homogène et plus universel :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    {
       T *x = T_create();
       if (x != NULL)
       {
          /* usage de x */
          T_delete(x), x = NULL;
       }
    }

  7. #7
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Emmanuel Delahaye toujours le mot qui casse

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par |PaRa-BoL
    Emmanuel Delahaye toujours le mot qui casse
    Prend ça comme tu veux.

  9. #9
    Membre éclairé Avatar de crocodilex
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    697
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 697
    Points : 858
    Points
    858
    Par défaut
    Citation Envoyé par |PaRa-BoL
    Un "Int/out" est aussi plus pratique pour la lisibilité des allocation/free étant donné que l'allocation se fera généralement dans la meme fonction que le free.
    Je n'ai pas bien compris l'utilité de ta méthode. Aurais-tu un exemple a nous donner ?

  10. #10
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Non ce que je veu dire c'est qu'il n'ya pas besoin de constructeur pour un simpl e malloc/free et que c'est plus lisible dans le meme bloque ><

  11. #11
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par |PaRa-BoL
    Non ce que je veu dire c'est qu'il n'ya pas besoin de constructeur pour un simpl e malloc/free et que c'est plus lisible dans le meme bloque ><
    Ben justement, dans la même fonction, tu as fais un malloc() caché et un free() explicite,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void func(...) {
        char *x;
        x = funtion_return();
        free(x);
    }
    ce qui n'est pas clair du tout. Tu as rompu la symétrie creation / destruction.

  12. #12
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    Bah oui c'est bien ce que je dit, c'était un "contre-exemple"

    Un "Int/out" est aussi plus pratique pour la lisibilité des allocation/free étant donné que l'allocation se fera généralement dans la meme fonction que le free.
    Alors que dans le cas d'une valeur retourné tu va devoir désalouer ta variable ailleur comme ca :
    Le "Alors" signifais que c'est une mauvaise méthode à appliquer ><

  13. #13
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par |PaRa-BoL
    Bah oui c'est bien ce que je dit, c'était un "contre-exemple" <...>Le "Alors" signifais que c'est une mauvaise méthode à appliquer ><
    OK, j'ai compris que je n'avais rien compris !

  14. #14
    Membre éclairé Avatar de |PaRa-BoL
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 738
    Points : 876
    Points
    876
    Par défaut
    OK, j'ai compris que je n'avais rien compris !
    Je comprend mieux ton incompréhension face à mon langage incompréhensible, désolé

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/09/2009, 10h52
  2. [Débutant] Recuperer la valeur retourner par une fonction
    Par chouki dans le forum MATLAB
    Réponses: 1
    Dernier message: 26/05/2009, 09h04
  3. Valeur retournée par une fonction
    Par defluc dans le forum Langage
    Réponses: 15
    Dernier message: 04/05/2009, 22h47
  4. Réponses: 2
    Dernier message: 11/04/2008, 22h58
  5. Réponses: 4
    Dernier message: 07/04/2007, 20h02

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