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 qui retourne qui une valeur


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    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 : 120
    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
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 309
    Billets dans le blog
    5
    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);
    }

  3. #3
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    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 : 120
    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
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 309
    Billets dans le blog
    5
    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 !

  5. #5
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    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 : 120
    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
    Expert confirmé
    Avatar de gerald3d
    Homme Profil pro
    Conducteur de train
    Inscrit en
    Février 2008
    Messages
    2 309
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Côte d'Or (Bourgogne)

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

    Informations forums :
    Inscription : Février 2008
    Messages : 2 309
    Billets dans le blog
    5
    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.

  7. #7
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    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 : 1 599
    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
    }

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2013
    Messages
    120
    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 : 120
    Par défaut
    C'est beaucoup plus clair maintenant
    merci

  9. #9
    Futur Membre du 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
    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: 15/12/2008, 23h32
  2. Réponses: 5
    Dernier message: 27/05/2008, 08h02
  3. Réponses: 3
    Dernier message: 19/05/2008, 13h51
  4. Réponses: 2
    Dernier message: 23/12/2007, 10h29
  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, 17h33

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