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
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 21
    Points : 28
    Points
    28
    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 éclairé 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
    Points : 825
    Points
    825
    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...
    il n'y a que ceux qui savent qui ne savent pas qu'ils savent...
    Libere-toi hacker, GNU's Not Unix!!!

  3. #3
    Responsable technique

    Avatar de Anomaly
    Homme Profil pro
    Directeur
    Inscrit en
    Juin 2003
    Messages
    10 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Somme (Picardie)

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

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 333
    Points : 130 178
    Points
    130 178
    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;
    }
    Responsable technique forum & site

    Si ce message (ou un autre) vous a aidé et/ou vous semble pertinent, votez pour lui avec

  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 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...
    Pas de Wi-Fi à la maison : CPL

  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 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