1. #1
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : décembre 2013
    Messages : 116
    Points : 99
    Points
    99

    Par défaut fonction qui retourne qui une valeur

    j'ai juste une petite question:

    En C , une fonction ne doit pas retourner une variable locale à une fonction, alors comment faire pour qu'on puisse retourner la valeur d'une variable sans passer celle ci en parametre de la fonction?
    Je ne veux pas allouer de memoire pour la vraible variable locale, ni passer la valeur a retourner comme parametre à la fonction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    size_t taille_chaine( const char* chaine)
    {
     //retourner la taille de la chaine en parametre.
    }

    quelqu'un a une idée?

  2. #2
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : février 2008
    Messages : 1 923
    Points : 3 633
    Points
    3 633
    Billets dans le blog
    3

    Par défaut

    Bonjour.

    Comme ca je suppose (si j'ai bien compris ta problématique) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    size_t taille_chaine( const char* chaine)
    {
      return strlen (chaine);
    }
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  3. #3
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : décembre 2013
    Messages : 116
    Points : 99
    Points
    99

    Par défaut

    on suppose que la fonction strlen n'existe pas, qu'on doit creer de toutes pièces.
    Supossons qu'on crée une fonction strlen à nous même.
    elle doit retourner le nombre de caractères de la chaine passée en paramètre.

  4. #4
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : février 2008
    Messages : 1 923
    Points : 3 633
    Points
    3 633
    Billets dans le blog
    3

    Par défaut

    Peux-tu tout de même déclarer une variable locale à la fonction ? Cette variable étant déclarée dans la pile il n'y a donc pas d'allocation dynamique (dans le tas). Si c'est possible alors on peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    size_t taille_chaine( const char* chaine)
    {
      size_t size=0;
     
      while (chaine [size]!='\0')
        size++;
     
      return size;
    }
    Remarque :
    Ce code sous-entend que chaine est valide. C'est à dire qu'elle contient bien un terminateur '\0'. Dans le cas contraire ce code génère une boucle infinie !
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  5. #5
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : décembre 2013
    Messages : 116
    Points : 99
    Points
    99

    Par défaut

    Selon mes recherches, retourner une variable locale à une fonction a comportement indéfini, comme vous le faites avec size_t size=0;.
    En effet selon mes recherches, après l’exécution e la fonction, toutes les variables locales en son sein sont détruites, voici pourquoi je ne voulais pas declarer
    size_t size=0; et retourner return size;;

  6. #6
    Membre expert
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    février 2008
    Messages
    1 923
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Conducteur de train
    Secteur : Transports

    Informations forums :
    Inscription : février 2008
    Messages : 1 923
    Points : 3 633
    Points
    3 633
    Billets dans le blog
    3

    Par défaut

    En effet toutes les variables déclarées entre deux {} sont détruites dés que l'on sort des accolades. Ce qui sera le cas lors de l'exécution de l'instruction return;.

    Cependant, ce sera une copie de size qui sera retournée, la valeur renvoyée sera donc la bonne. Il n'y aura donc rien d'indéfini.
    Utilisation de Glade avec Gtk+ - N'oubliez pas de consulter les FAQ Gtk et les cours et tutoriels Gtk

  7. #7
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : décembre 2013
    Messages : 116
    Points : 99
    Points
    99

    Par défaut

    Citation Envoyé par gerald3d
    Cependant, ce sera une copie de size qui sera retournée, la valeur renvoyée sera donc la bonne. Il n'y aura donc rien d'indéfini.
    Mais prenons le cas général, comment déclarer la variable que je veux retourner de sorte qu'il sorte n'y a pas e comportement indéfini.
    Voici les cas que je connais:
    -passer la variable à retourner la valeur en paramètre de la fonction, soit son adresse;
    -allouer de la mémoire pour la variable locale à la fonction avec malloc ou calloc.
    comment faire autrement ??
    merci

  8. #8
    Membre expert
    Avatar de fred1599
    Homme Profil pro
    Enseignant
    Inscrit en
    juillet 2006
    Messages
    2 240
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : juillet 2006
    Messages : 2 240
    Points : 3 620
    Points
    3 620

    Par défaut

    Eh bien comme nous n'arrivons pas à cibler ce que tu souhaites, je te laisse lire un tutoriel sur la durée de vie des variables. Tu feras ensuite tes choix, bonne continuation...
    Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
    La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)

  9. #9
    Expert éminent sénior

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    juin 2007
    Messages
    4 989
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : juin 2007
    Messages : 4 989
    Points : 16 645
    Points
    16 645

    Par défaut

    Le mot-clé return défini la valeur de l'expression constituée par l'appel de la fonction. C'est son rôle. Il n'y a pas de variable impliquée dans cette histoire.

    La valeur de l'appel de fonction est la valeur calculée de l'expression qui suit le mot-clé return, convertie dans le type de retour de la fonction.
    Si cette expression est le nom d'une variable, la valeur de cette variable est utilisée.

    La variable n'est détruite qu'à la sortie de la fonction, donc après l'exécution du return en lui-même.
    Mes principes de bases du codeur qui veut pouvoir dormir:
    • Une variable de moins est une source d'erreur en moins.
    • Un pointeur de moins est une montagne d'erreurs en moins.
    • Un copier-coller, ça doit se justifier... Deux, c'est un de trop.
    • jamais signifie "sauf si j'ai passé trois jours à prouver que je peux".
    • La plus sotte des questions est celle qu'on ne pose pas.
    Pour faire des graphes, essayez yEd.
    le ter nel est le titre porté par un de mes personnages de jeu de rôle

  10. #10
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : décembre 2013
    Messages : 116
    Points : 99
    Points
    99

    Par défaut

    Merci pour l’éclairage

  11. #11
    Membre expert
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    décembre 2015
    Messages
    596
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : décembre 2015
    Messages : 596
    Points : 3 050
    Points
    3 050

    Par défaut

    Citation Envoyé par free_01_binairy Voir le message
    En C , une fonction ne doit pas retourner une variable locale à une fonction
    En C, on peut tout fait retourner une expression quelconque qui peut aussi être la valeur d'une variable.
    Ce qui ne doit pas être fait c'est :
    * retourner l'adresse d'une variable locale (car on obtient un pointeur sur une variable qui n'existe plus.)
    * retourner une variable qui est du type tableau, car dans ce cas il y a conversion implicite en pointeur sur le tableau et on est ramené au cas précédent.
    Sinon tout ce qui n'est pas un tableau peut être retourné par une fonction, y compris une struct ou une union.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    typedef struct Toto {
        int a;
        int b;
    } Toto;
    Toto fonction() {
       Toto x;
       x.a = 1;
       x.b = 2;
       return x;
    }
    int main() {
       Toto y = fonction(); // OK, on a reçu dans y une copie du Toto x
    }

  12. #12
    Membre régulier
    Homme Profil pro
    Développeur informatique
    Inscrit en
    décembre 2013
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : décembre 2013
    Messages : 116
    Points : 99
    Points
    99

    Par défaut

    C'est beaucoup plus clair maintenant
    merci

  13. #13
    Nouveau Candidat au Club
    Homme Profil pro
    Technicien réseaux et télécoms
    Inscrit en
    décembre 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Technicien réseaux et télécoms
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : décembre 2012
    Messages : 4
    Points : 0
    Points
    0

    Par défaut A propos du retour (return) ...

    Bonjour,
    Il ne faut pas perdre de vue, qu'un Pointeur, c'est le Représentant d'une Variable, qui contient une Valeur .
    Fort de ce point de vue, le retour, d'un Pointeur, d'une Variable ou d'une Valeur, ne devient, qu'un jeu d'enfant ...
    Ceci, ressemble à un proverbe, mais je vous assure, que je m'en sors très bien avec, dans mes programmes.

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

Discussions similaires

  1. Appel de fonction par SYS qui retourne une erreur
    Par tibal dans le forum PL/SQL
    Réponses: 3
    Dernier message: 16/12/2008, 00h32
  2. Réponses: 5
    Dernier message: 27/05/2008, 09h02
  3. Réponses: 3
    Dernier message: 19/05/2008, 14h51
  4. Réponses: 2
    Dernier message: 23/12/2007, 11h29
  5. fonction qui vérifie si une valeur est numérique?
    Par ryadh.naouar dans le forum C
    Réponses: 16
    Dernier message: 05/07/2007, 18h33

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