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 :

L'instruction 'return' et ses valeurs


Sujet :

C

  1. #1
    Modérateur

    Avatar de Bktero
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2009
    Messages
    4 493
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2009
    Messages : 4 493
    Billets dans le blog
    1
    Par défaut L'instruction 'return' et ses valeurs
    Bonjour.

    Je préviens tout de suite que ça sent la question très con Mon interrogation du jour vient de l'instruction return. Dans le désordre :

    Code Numero 1 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(void)
    {
        printf("\nTest d'un non retour au lieu d'un int : %d",retourHasardeux());
        return 0;
    }
     
    int retourHasardeux(void)
    {
        //NOP
    }
    a t-il un comportement défini ?
    Avec Codeblocks sous XP, ça me renvoit zéro.
    EDIT : Pas de message à la compilation/édition des liens. --> en fait j'ai quand même un warning.

    Code Numéro 2 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    int main(void)
    {
        printf("\nTest d'un non retour au lieu d'un int : %d",retourHasardeux());
        return 0;
    }
     
    int retourHasardeux(void)
    {
        return;
    }
    Même question en modifiant la fonction. J'observe le même comportement personnellement.
    EDIT : et le message de warning est différent.


    Code Numéro 3 : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void retourHasardeux(void)
    {
        return;
    }
    Si j'ai un return dans la fonction, peut-elle encore avoir un retour de type void?


    Et enfin pour terminer, est-ce que c'est mal de faire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    type grosseFonction(type nom)
    {
        if(une condition)
        {
             return;
        }
        else
        {
             // faire plein de choses
            return unTruc;
        }
    }
    J'entends dire que l'usage d'un return pour couper court à l'exécution d'une fonction n'est pas vraiment une règle de bon usage. Vos avis ?


    Encore une fois merci pour vos réponses ?

  2. #2
    Invité(e)
    Invité(e)
    Par défaut
    Citation Envoyé par Bktero Voir le message
    a t-il un comportement défini ?
    Oui. Dans ton exemple, ta fonction renvoie 0, mais elle pourrait renvoyer d'autres choses :
    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
    #include <stdio.h>
     
    int foo(int k) 
    {
        int i; 
        i = k;   
    }
     
    int main(void) 
    {
        int i;
        for(i = 0; i < 10; ++i) {
            printf("foo(%d) = %d\n", i, foo(i)); 
        }
        return 0;
    }
    donne chez moi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    foo(0) = 0
    foo(1) = 11
    foo(2) = 12
    foo(3) = 12
    foo(4) = 12
    foo(5) = 12
    foo(6) = 12
    foo(7) = 12
    foo(8) = 12
    foo(9) = 12
    Citation Envoyé par Bktero Voir le message
    Si j'ai un return dans la fonction, peut-elle encore avoir un retour de type void?
    Oui tout à fait, il suffit de ne rien mettre derrière le return à part un point virgule.

    Citation Envoyé par Bktero Voir le message
    J'entends dire que l'usage d'un return pour couper court à l'exécution d'une fonction n'est pas vraiment une règle de bon usage. Vos avis ?
    Dans les fonctions simples, ça n'est pas trop gênant. Ça peut le devenir pour les fonctions complexes.
    Lorsqu'il y a des ressources à libérer (mémoire, fichier...) c'est quand même plus simple de le faire en une fois à le fin de fonction plutôt que devant chaque return.

  3. #3
    Membre chevronné
    Avatar de haraelendil
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2004
    Messages
    283
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2004
    Messages : 283
    Par défaut
    Alors, c'est généralement une mauvaise idée de ne pas faire son return, parce que justement tu peux te retrouver avec tout et n'importe quoi, ça peut marcher dans la plupart des cas jusqu'au jour ou ça tombera sur ce qu'il fallait pas et boum, fin du monde (enfin pour ton programme^^).

    Sinon bien sur qu'une fonction void peut avoir des return; ça quittera juste la fonction à cet endroit.

    Pour ce qui est de terminer, non c'est pas mal, et ça permet même généralement de simplifier grandement les choses quand il commence à y avoir plein de if les uns dans les autres, à voir selon le cas.

    [edit] grillé :p [/edit]

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/05/2009, 09h59
  2. [PHP 5.0] Tri/Affichage d'un tableau à partir d'une de ses valeurs
    Par Wearmoi dans le forum Langage
    Réponses: 1
    Dernier message: 31/03/2009, 16h34
  3. DataTable et ses valeurs
    Par gabdeschenes dans le forum ASP.NET
    Réponses: 3
    Dernier message: 25/03/2009, 15h47
  4. L'instruction RETURN FALSE;
    Par kheiro dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/11/2007, 15h38
  5. Getopt et ses valeurs
    Par Invité dans le forum C
    Réponses: 19
    Dernier message: 25/05/2006, 17h49

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