1. #1
    Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2018
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2018
    Messages : 1
    Points : 3
    Points
    3

    Par défaut variables statiques en globale et mot-clé extern

    Salut,
    d'après ce que j'ai compris, pour que la variable ne soit visible que dans le fichier.c où elle a été déclarée il faut la déclarer comme variable statique.
    Mais pour qu'elle soit visible dans d'autre fichiers, on a besoin de reporter la déclaration à ces autres fichiers avec le mot-clé extern. Ca veut dire qu'elle est visible par défaut uniquement dans le fichier où elle a été déclarée.
    Donc si elle est par défaut statique pourquoi la déclarer comme statique ?? je ne comprend rien

  2. #2
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    septembre 2005
    Messages
    26 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France

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

    Informations forums :
    Inscription : septembre 2005
    Messages : 26 704
    Points : 39 060
    Points
    39 060

    Par défaut

    Si une variable globale est déclarée static, alors même si un autre fichier la déclare en extern, il ne la trouvera pas.
    Cela évite les problèmes si une autre variable globale a le même nom.
    SVP, pas de questions techniques par MP. Surtout si je ne vous ai jamais parlé avant.

    "Aw, come on, who would be so stupid as to insert a cast to make an error go away without actually fixing the error?"
    Apparently everyone.
    -- Raymond Chen.
    Traduction obligatoire: "Oh, voyons, qui serait assez stupide pour mettre un cast pour faire disparaitre un message d'erreur sans vraiment corriger l'erreur?" - Apparemment, tout le monde. -- Raymond Chen.

  3. #3
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    février 2006
    Messages
    6 269
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : février 2006
    Messages : 6 269
    Points : 17 576
    Points
    17 576
    Billets dans le blog
    1

    Par défaut

    Bonjour
    Citation Envoyé par pseudomehdi Voir le message
    mais si pour qu'elle soit visible dans d'autre fichiers on a besoin de reporter la déclaration à ces autres fichiers avec le mot-clé extern ça veut dire qu'elle est par défaut visible uniquement dans le fichier où elle a été déclaré
    Non, la mettre en extern n'a pas pour but de reporter sa déclaration, ça a juste pour but de ne pas faire râler le compilateur quand il analyse le code.

    Le compilateur travaille en 2 étapes
    1) il analyse la syntaxe. Là, s'il voit une variable non déclarée, il va râler.
    2) il crée les liens entre les divers sources (dans le cas d'un programme multi-sources). Là, s'il voit qu'il y a plusieurs variables (dans différents sources) qui ont le même nom, il ne sait plus quoi faire.

    Donc tu définis ta variable dans un seul source (généralement celui qui contient le main) et tu la déclares avec extern dans les autres sources. Le compilateur, quand il analyse le source, voit la déclaration de la variable et en plus il sait qu'elle a été définie ailleurs donc il ne lui réserve pas de mémoire. Et à l'édition de liens, il relie toutes les références (des différents sources) de la variable à la zone mémoire qui lui correspond.

    Citation Envoyé par pseudomehdi Voir le message
    donc si elle est par défaut statique pourquoi la déclarer comme statique ??
    Ca te permet d'avoir des variables portant le même nom dans divers sources qui seront, dans ce cas là, globales mais seulement dans le source (pas de collision).
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site

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

Discussions similaires

  1. Variables globales non déclarées et 'extern'
    Par TomTom68 dans le forum C
    Réponses: 14
    Dernier message: 06/09/2011, 11h35
  2. Réponses: 4
    Dernier message: 14/10/2009, 10h52
  3. Pb variable statique globale
    Par melleb dans le forum C++
    Réponses: 7
    Dernier message: 18/06/2009, 19h28
  4. Réponses: 6
    Dernier message: 14/02/2005, 11h53
  5. variables locales ou globales ???
    Par elvivo dans le forum C
    Réponses: 13
    Dernier message: 03/07/2002, 08h22

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