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 :

Retour fonction


Sujet :

C

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 21
    Par défaut Retour fonction
    Bonjour.
    J'ai une fonction A et une fonction B.

    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
    17
    18
     
     
    void A(void)
    {
    int i;
     
        B(&i);
     
    }
     
    bool B( int *i)
    {
     
    *i=5;
     
    return true;
     
    }
    tout fonctione bien, mais la question est ce que c'est la bonne methode pour qu'une fonction retourne deux variables de type distinct, ou existe t il une autre methode ?

    Merci de vos reponses.

  2. #2
    Membre émérite Avatar de genteur slayer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2002
    Messages
    710
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2002
    Messages : 710
    Par défaut
    je pense que tu peux aussi tout passer par paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void ( int *i , BOOL *b)
    {
           *i=5;
           *b=true;
    }
    je pense que cela doit aussi marcher, je ne sais pas les différence entre les deux méthode, mais celle-ci me parrait plus propre...

  3. #3
    Expert éminent

    Avatar de Anomaly
    Homme Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 380
    Billets dans le blog
    1
    Par défaut
    Tu peux également renvoyer une structure contenant les résultats. Attention, ne pas en abuser (côté taille), car la structure sera copiée plusieurs fois.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    struct result_fonction {
      int i;
      double j;
    };
     
    struct result_fonction fonction(void)
    {
      struct result_fonction r;
      r.i = 1;
      r.j = 1.1;
      return r;
    }

  4. #4
    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 genteur slayer
    je pense que tu peux aussi tout passer par paramètre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    void ( int *i , BOOL *b)
    {
           *i=5;
           *b=true;
    }
    je pense que cela doit aussi marcher, je ne sais pas les différence entre les deux méthode, mais celle-ci me parrait plus propre...
    Oui, c'est correct, mais il faut alors tester 2 pointeurs... (Qui prendait le risque de déférérencer un pointeur NULL...)

    Si il faut passer plus d'un paramètre de type pointeur, c'est qu'il faut probablement une structure...

    En supposant que 'BOOL' et 'true' sont définis:
    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
    typdef struct 
    {
       int i;
       BOOL b;
    }
    data_s;
     
    void (data_s *this)
    {
       if (this != NULL)
       {
          this->i = 5;
          this->b = true;
       }
    }
    C'est quand même plus clair et extensible à l'infini...

  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 : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par Anomaly
    Tu peux également renvoyer une structure contenant les résultats. Attention, ne pas en abuser (côté taille), car la structure sera copiée plusieurs fois.
    J'ajouterais qu'il est possible de regler le probleme de la taille renvoyer en allouant dynamiquement la structure et en renvoyant juste un pointeur sur celle-ci. Il faut bien entendu dans ce cas (comme toujours lors d'allocation dynamique) verifier si l'allocation s'est bien derouler et penser a liberer la memoire lorsqu'elle devient inutile.

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

Discussions similaires

  1. Retour fonction open
    Par viscere dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 06/08/2007, 16h09
  2. retour fonction erreur execution 91
    Par samtheh dans le forum VBA Access
    Réponses: 2
    Dernier message: 31/05/2007, 11h53
  3. Recuperer retour fonction PL/SQL
    Par pegase06 dans le forum Bibliothèques
    Réponses: 2
    Dernier message: 14/02/2007, 09h25
  4. Retour fonction
    Par Mookie dans le forum C++
    Réponses: 13
    Dernier message: 12/01/2005, 11h43

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