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 :

les variables globales static


Sujet :

C

  1. #1
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2002
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2002
    Messages : 136
    Points : 598
    Points
    598
    Par défaut les variables globales static
    ben voilà, je voulais savoir quel est l'apport de la déclaration de variables de portée globale en static : :
    en fait j'ai vu ça dans le kit de développement TWAIN et je ne l'avais jamais vu. je vous demande pas de me dire que globale = pas bien, y'a des fois ou on peut pas faire autrement.
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    /* blabla de l'entête */
    #include ...
     
    /* définition des static global */
    static int MonEntier;
     
    ...
    Merci beaucoup

  2. #2
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    mars 2002
    Messages
    668
    Détails du profil
    Informations forums :
    Inscription : mars 2002
    Messages : 668
    Points : 623
    Points
    623
    Par défaut
    pour moi une variable globale, c'est à dire visible par
    tous, est toujours statique.

    en revanche, décrite dans une fonction, une variable statique conserve
    sa valeur d'un appel à l'autre de la fonction; une variable non statique
    est réinitialisée à chaque appel de la fonction

    décrite dans une classe, une variable statique concerne l'ensemble de
    la classe et non une instance de la classe

  3. #3
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2002
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2002
    Messages : 136
    Points : 598
    Points
    598
    Par défaut
    ben ça je savais déjà, mais comme je l'ai dit dans mon post, c'était pas dans une fonction.
    j'essayerai de poster le début du code demain pour y voir plus clair

  4. #4
    Membre averti

    Homme Profil pro
    Inscrit en
    mars 2002
    Messages
    0
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 0
    Points : 309
    Points
    309
    Par défaut
    C'est une variable globale uniquement accessible dans le fichier .c où elle a été déclarée.

  5. #5
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    Avatar de DrQ
    Profil pro
    Inscrit en
    mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 388
    Points : 1 490
    Points
    1 490
    Par défaut
    Une variable globale est accessible de n'importe ou depuis ton prog. Mais si tu instancie un nouvel de ta classe la variable globale ne sera pas la même que la variable de ton premier objet.

    Avec static, l'avantage c'est que tout les progs qui utilisent la même librairie auront en commun cette variable. Comme exemple tu peux avoir isOccupied en static global.

    J'ai jamais fait le test mais normalement c'est ca.
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  6. #6
    Nouveau membre du Club
    Inscrit en
    avril 2002
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 23
    Points : 35
    Points
    35
    Par défaut
    Extrait de l'aide de Visual C++ :

    When modifying a variable, the static keyword specifies that the variable has static duration (it is allocated when the program begins and deallocated when the program ends) and initializes it to 0 unless another value is specified. When modifying a variable or function at file scope, the static keyword specifies that the variable or function has internal linkage (its name is not visible from outside the file in which it is declared).

    In C++, when modifying a data member in a class declaration, the static keyword specifies that one copy of the member is shared by all the instances of the class. When modifying a member function in a class declaration, the static keyword specifies that the function accesses only static members.

  7. #7
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    Avatar de DrQ
    Profil pro
    Inscrit en
    mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 388
    Points : 1 490
    Points
    1 490
    Par défaut
    ahhh
    Mais y a un souci alors !!!

    its name is not visible from outside the file in which it is declared
    Et le prob est si elle est globale alors elle est visible de l'exterieur...

    Ou alors g rien compris.
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  8. #8
    Nouveau membre du Club
    Inscrit en
    avril 2002
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : avril 2002
    Messages : 23
    Points : 35
    Points
    35
    Par défaut
    Citation Envoyé par DrQ
    ahhh
    Mais y a un souci alors !!!

    its name is not visible from outside the file in which it is declared
    Et le prob est si elle est globale alors elle est visible de l'exterieur...

    Ou alors g rien compris.
    On va faire une explication par l'exemple dans ce cas :

    C:\> type f1.c
    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
     
    #include <stdio.h>
    int i = 10;
    static int j = 20;
     
    void printf1(void);
    void printf2(void);
     
    void printf1(void) {
      printf("i=%d, j=%d\n", ++i, ++j);
    }
     
    #pragma argsused
    int main(int argc, char **argv) {
      printf1();
      printf2();
      return 0;
    }
    c:\> type f2.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #include <stdio.h>
    extern int i;   /* si on affecte une valeur à i, on obtient une erreur 
                         * Warning: Public symbol '_i' defined in both f1.obj
                         * and f2.obj
                         */
    static int j = 30;
     
    void printf2(void) {
      printf("i=%d j=%d\n", ++i, ++j);
    }
    on compile :

    et on peut observer le résultat suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    i=11 j=21
    i=12 j=31
    Pourquoi ?

    Car i est considéré par le compilateur comme une seule et même variable avec un seul emplacement mémoire, tandis qu'il y a deux variables j : f1.j et f2.j et donc avec chacune leur adresse mémoire.

  9. #9
    Membre confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    avril 2002
    Messages
    136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : avril 2002
    Messages : 136
    Points : 598
    Points
    598
    Par défaut
    c'est tout a fait normal ! tu aurrais su lui mettre extern devant pour ne pas avoir des resultats différents !

    Pour les détails voir les tutoriels et cours de formation pour apprendre le langage C : http://c.developpez.com/cours/

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 07/04/2006, 02h10
  2. Les variables globales en C++
    Par jeje99 dans le forum C++
    Réponses: 4
    Dernier message: 03/02/2006, 16h52
  3. Réponses: 13
    Dernier message: 21/11/2005, 12h05
  4. Supprimer la mémoire utilisée par les variables globales
    Par dnaprotector dans le forum OpenGL
    Réponses: 4
    Dernier message: 21/07/2005, 14h18
  5. question sur les variables globales et les thread posix
    Par souris_sonic dans le forum POSIX
    Réponses: 5
    Dernier message: 13/06/2003, 14h59

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