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 :

variable static d'une fonction[debutant]


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 45
    Points
    45
    Par défaut variable static d'une fonction[debutant]
    Bonjour,
    quelqu'un peut-il m'expliquer pour le code suivant ne me permet d'afficher la variable i ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void func() {
    	static int i=0;
    }
     
    int main()
    {
    	func();
    	cout<<i<<std::endl;
    }
    Une variable static n'est pas censé entre utilisable en dehors de la fonction ?
    Rémi

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    static modifie le 'storage duration' mais pas sa portée.

  3. #3
    Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Août 2006
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2006
    Messages : 84
    Points : 45
    Points
    45
    Par défaut
    merci.
    Est ce que la seule solution pour utiliser des données d'une fonction dans une autre fonction par exemple ou dans un autre programme est d'utiliser un return ou bien de définir une variable globale ?
    Rémi

  4. #4
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    J'aurais tendance à dire que la bonne pratique est que la fonction soit responsable du retour de la valeur de la variable :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    int func() {
    	static int i=0;
            return i;
    }
    // ou :
    void func(int &i_val_) {
    	static int i=0;
            i_val_ = i;
    }
    L'utilisation d'une variable globale est possible, mais l'usage montre que les variables globales sont délicates à manipulées et souvent source de problèmes.

    Cependant, avoir une variable statique dans une fonction revient à avoir une variable globale mais encapsulée par cette fonction. La question que tu dois te poser est pourquoi as-tu besoin de par ta conception d'une telle variable ?

  5. #5
    Expert éminent
    Avatar de Melem
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Janvier 2006
    Messages
    3 656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Janvier 2006
    Messages : 3 656
    Points : 8 389
    Points
    8 389
    Par défaut
    Le rôle du mot-clé static (en C comme en C++) à l'intérieur d'une fonction est expliqué ici.

    static modifie le 'storage duration' mais pas sa portée.
    Mais devant la définition d'une variable globale ou la déclaration d'une fonction ou la définition d'une fonction qui n'a pas été déclarée (ou en le mettant devant la déclaration et devant la définition ), static rend la variable ou la fonction visible que depuis le fichier source où elle a été définie.

    Est ce que la seule solution pour utiliser des données d'une fonction dans une autre fonction par exemple ou dans un autre programme est d'utiliser un return ou bien de définir une variable globale ?
    Toujours préférer les variables locales.

  6. #6
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 614
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 614
    Points : 30 626
    Points
    30 626
    Par défaut
    Salut,

    La première question qui me vient à l'esprit avant d'essayer de te répondre est:
    Pourquoi souhaiterais tu déclarer une variable static au sein d'une fonction
    La seule réponse adaptée étant
    Pour permettre à cette variable de garder sa valeur entre deux appels à la fonction
    et comme corolaire le fait que, dans tous les autres cas, la variable ne doit pas être déclarée static.

    Pour répondre à la question de savoir comment permettre la transmission d'une variable entre deux fonction, tu as les possibilités suivantes:
    • Si la variable existe dans la fonction appelante et doit être transmise à la fonction appelée, passe la variable en paramètre à la fonction appelée (1)
    • Si la variable existe dans la fonction appelée et doit être transmise à la fonction appelante, renvoie la par retour de fonction

    Pour être complet sur le (1), il faut prendre en compte que:
    • si la variable est une instance d'une classe, qui risque donc de poser problème lors de la copie ou dont la copie risque d'être gourmande en temps et / ou en mémoire, il est conseillé de la transmettre sous la forme d'une référence
      • constante si la fonction appelée ne doit pas modifier la variable qui lui est transmise
      • non constance si une modification de la variable dans la fonction appelée doit être répercutée dans la fonction appelante

    Cela reste très schématique et pourrait donc amener son lot de remarques et d'amendements, mais cela te permet de te faire une idée générale de la manière de considérer les choses

    Si tu a la moindre question sur la manière de mettre tout cela en oeuvre, n'hésite pas à la poser
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. Variable static dans une fonction membre
    Par uriotcea dans le forum C++
    Réponses: 8
    Dernier message: 09/07/2009, 14h48
  2. [Lisp] Variable considérée comme une fonction
    Par lunart dans le forum Lisp
    Réponses: 2
    Dernier message: 07/04/2005, 15h48
  3. Utilisé une variable hors d'une fonction
    Par PrinceMaster77 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/02/2005, 19h21
  4. variable hors d'une fonction
    Par Anduriel dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 02/02/2005, 08h29
  5. declaration static d'une fonction classe
    Par SBP dans le forum MFC
    Réponses: 2
    Dernier message: 06/07/2004, 14h40

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