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 :

Fonction ne retournant pas toujours une valeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Par défaut Fonction ne retournant pas toujours une valeur
    Bonjour,

    j'ai développé cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int f(BOOL condition,int x,int y){
     if (condition)
         return x*y;
    }
    Comment fais-je dans ce cas ? En effet, si la condition est valide, en retour il y aura le résultat de x*y mais que se passe-t-il si la condition n'est pas valide ?

    Au revoir

  2. #2
    Rédacteur/Modérateur
    Avatar de Trap D
    Profil pro
    Inscrit en
    Septembre 2003
    Messages
    4 942
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2003
    Messages : 4 942
    Par défaut
    n'importe quoi !
    Il faut que tu renvoies une valeur impossible et que tu testes ce retour pour savoir que tu ne dois pas tenir compte du résultat.
    "La haine seule fait des choix" - Koan Zen
    "Il ne faut pas être meilleur que les autres, il faut être meilleur que soi." Albert Jacquard
    "Ceux qui savent où ils ont posé leur parapluie ne sont pas alcooliques." - pgibonne.
    Faites du Prolog, ça vous changera les idées !
    Ma page Prolog
    Mes codes sources commentés

    Mon avatar : La Madeleine à la veilleuse de Georges de La Tour

  3. #3
    Membre émérite 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
    Par défaut
    Citation Envoyé par mastochard
    Comment fais-je dans ce cas ?
    Rajoute un "else" et renvois quelque chose de cohérent.

  4. #4
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Ou une astuce à la con:utiliser des pointeurs dont la valeur "NULL" peut être utilisée pour signifier cette abscence de résultat; mais ça risue de compliquer le programme et ça revient à utiliser une valeur particulière.

  5. #5
    Membre chevronné Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Par défaut
    Citation Envoyé par mastochard
    Bonjour,

    j'ai développé cette fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int f(BOOL condition,int x,int y){
     if (condition)
         return x*y;
    }
    Comment fais-je dans ce cas ? En effet, si la condition est valide, en retour il y aura le résultat de x*y mais que se passe-t-il si la condition n'est pas valide ?

    Au revoir

    indique que la fonction retourne un int. toujours

    Si tu ne retournes rien, ton compilateur risque de chier une pendule.

    Donc soit tu fait retourner un resultat impossible a ta fonction, pour que du cote de l'appelant tu saches que la condition n'a pas ete verifiee, soit tu te debrouille pour faire le test dans l'appelant.

    Une fonction en C finit toujours par un return. Et une fonction de type int retourne toujours un int.

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par Jack_serious
    soit tu te debrouille pour faire le test dans l'appelant.

  7. #7
    Expert confirmé
    Avatar de Skyounet
    Homme Profil pro
    Software Engineer
    Inscrit en
    Mars 2005
    Messages
    6 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Software Engineer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 6 380
    Par défaut
    En fait c'est bien pratique les exceptions en C++...

  8. #8
    Membre régulier
    Inscrit en
    Mai 2006
    Messages
    9
    Détails du profil
    Informations forums :
    Inscription : Mai 2006
    Messages : 9
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (condition)
        {
          resultat = f (a, b);
        }
    C bien ce qui me semblait, si si, je vous assure.
    Merci.
    Au revoir

  9. #9
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Jack_serious
    Une fonction en C finit toujours par un return. Et une fonction de type int retourne toujours un int.
    Et une fonction de type void, ca doit aussi posseder un return..?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par NaeiKinDus
    Et une fonction de type void, ca doit aussi posseder un return..?
    oui, mais il est implicite

  11. #11
    Invité
    Invité(e)
    Par défaut
    Donc pas la peine d'en mettre si c'est implicite
    Merci pour la reponse ^_^

  12. #12
    Membre Expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Par défaut
    Pourquoi "return =" et pas "return" tout court?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mastochard
    j'ai développé cette fonction:
    t'aurais pas du !
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    int f(BOOL condition,int x,int y){
     if (condition)
         return x*y;
    }
    Comment fais-je dans ce cas ? En effet, si la condition est valide, en retour il y aura le résultat de x*y mais que se passe-t-il si la condition n'est pas valide ?
    Mauvaise conception. Le return doit être unique et être la dernière instruction de l'instruction. Mais en fait, c'est la fonction qui est mal organisée. Le test n'a rien à faire ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    int f(int x,int y)
    {
       return x*y; /* EDIT */
    }
     
    ...()
    {
       if (condition)
        {
          resultat = f (a, b);
        }
    }
    tout simplement... sinon, ça risque d'être extrêment tordu...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 16/04/2020, 17h57
  2. Chemins de code de retournant pas forcément une valeur
    Par Tanoak_LaCapuche dans le forum C#
    Réponses: 3
    Dernier message: 12/07/2012, 15h44
  3. Réponses: 9
    Dernier message: 17/10/2011, 12h41
  4. WebPart - Tous les chemins ne retournent pas nécessairement une valeur
    Par Spitfire378 dans le forum Développement Sharepoint
    Réponses: 2
    Dernier message: 25/05/2011, 08h41
  5. Réponses: 3
    Dernier message: 19/12/2007, 14h50

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