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 :

plusieurs resultats de fonctions


Sujet :

C

  1. #1
    sos
    sos est déconnecté
    Nouveau membre du Club
    Inscrit en
    Décembre 2003
    Messages
    17
    Détails du profil
    Informations forums :
    Inscription : Décembre 2003
    Messages : 17
    Points : 29
    Points
    29
    Par défaut plusieurs resultats de fonctions
    bonjour tout le monde,
    je voudrais savoir comment faire pour qu'une fonction retourner plusieurs résulats de types différents.
    en d'autres tere comment peut on impléménter une procédure avec le langage C
    merci pour votre aide

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    En C, une fonction ne peut renvoyer qu'une variable. Pour lui faire retourner plusieurs choses les possibilites sont :

    * si toutes les variables de retour sont du meme type de lui faire retourner un tableau.
    * lui faire retourner une strucuture
    * ou passer les parametres par adresse et non par valeur et a ce moment la le retour se fait par les parametres.

  3. #3
    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 Re: plusieurs resultats de fonctions
    Citation Envoyé par sos
    je voudrais savoir comment faire pour qu'une fonction retourner plusieurs résulats de types différents.
    Ce n'est pas possible par 'return'.

    Le plus simple et le plus efficace est de créer une structure résultats :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    typedef struct
    {
       int a;
       double b;
    /* etc * /
    }
    result_s;
    d'ajouter à la fonction un paramètre pointeur de ce type:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void myfunc (<autres params>, result_s *const p_res)
    {
    ... calculs ...
       if (p_res != NULL)
       {
          p_res->a = ...;
          p_res->b = ...;
       }
    }
    et d'appeler la fonction comme suit:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    {
       result_s res;
       myfunc (<autres params>, &res);
    }
    en d'autres termes comment peut on impléménter une procédure avec le langage C
    Il n'y a pas de 'procedure' en C. Seulement des fonctions.

  4. #4
    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 gl
    En C, une fonction ne peut renvoyer qu'une variable. Pour lui faire retourner plusieurs choses les possibilites sont :

    * si toutes les variables de retour sont du meme type de lui faire retourner un tableau.
    * lui faire retourner une strucuture
    * ou passer les parametres par adresse et non par valeur et a ce moment la le retour se fait par les parametres.
    Attention. Je pense que tu sais tout ça, mais ce que tu as écrit pourrait être mal interprété...

    • On ne sait pas 'retourner un tableau' en C. Seulement l'adresse de celui-ci. De plus, elle doit être valide après l'exécution de la fonction, ce qui n'est pas le cas si le tableau est local à celle-ci.
    • Retourner une structure peut être pénalisant (recopie d'un bloc mémoire plus ou moins gros...)
    • En C, on ne sait passer que des paramètres par valeur. Ne pas confondre passer l'adresse d'une variable (qui se fait explicitement via un pointeur et l'opérateur '&' dans l'appel) et passer un paramètre par addresse qui n'existe pas en C (mais existe en C++. On dit aussi 'par référence').

  5. #5
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Attention. Je pense que tu sais tout ça, mais ce que tu as écrit pourrait être mal interprété...

    • On ne sait pas 'retourner un tableau' en C. Seulement l'adresse de celui-ci. De plus, elle doit être valide après l'exécution de la fonction, ce qui n'est pas le cas si le tableau est local à celle-ci.
    • Retourner une structure peut être pénalisant (recopie d'un bloc mémoire plus ou moins gros...)
    Bien entendu, c'est vrai que j'ai fait un raccourci un peu rapide. Tu as bien fait de preciser. Concernant les structures, le probleme de la taille peu etre resolu en retournant un pointeur sur cette strucuture, avec la encore les memes precautions a prendre que pour les tableaux.

    Citation Envoyé par Emmanuel Delahaye
    • En C, on ne sait passer que des paramètres par valeur. Ne pas confondre passer l'adresse d'une variable (qui se fait explicitement via un pointeur et l'opérateur '&' dans l'appel) et passer un paramètre par addresse qui n'existe pas en C (mais existe en C++. On dit aussi 'par référence').
    Sur ce point je ne suis pas tout a fait d'accord. Passer l'adresse d'une variable revient bien, par definition meme, a passer cette variable par adresse (le passage par reference est encore un autre mecanisme). Mais bon ce n'est qu'une question de semantique.

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

Discussions similaires

  1. Utilisation d'un resultat de fonction dans plusieurs champ
    Par 2-high dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 03/10/2007, 14h36
  2. retour recursif de plusieurs resultat via une procedure
    Par vbcasimir dans le forum Bases de données
    Réponses: 1
    Dernier message: 17/06/2005, 08h47
  3. [LG]Parametres ou resultat de fonction : tableau
    Par patdez dans le forum Langage
    Réponses: 2
    Dernier message: 12/05/2004, 12h19
  4. Réponses: 19
    Dernier message: 01/04/2004, 14h41
  5. [LG]Resultat de fonction de type Record ?
    Par Mike888 dans le forum Langage
    Réponses: 10
    Dernier message: 24/01/2004, 22h48

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