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

Langage C++ Discussion :

Portée pour une variable déclarée extern


Sujet :

Langage C++

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Par défaut Portée pour une variable déclarée extern
    Bonjour

    j'ai un fichier toto.h dans lequel j'ai mis quelques #define et 2 variables déclarées extern

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    /*
     * Mon fichier toto.h
     */
     
    extern uint32_t variable1;
    extern uint8_t variable2;
     
    #define macro1 ...
    #define macro2 ...
    J'inclus ce fichier toto.h dans mon code principal, mais impossible d'utiliser mes variables déclarées extern dans des fonctions de ce code principal.
    Lors de la compilation j'ai le message : variable1 was not declared in this scope.

    Pourquoi est ce que mes variables ne sont pas vues dans mon code principal (qui incorpore mon fichier où elles sont déclarées) comme une variable globale ? Ai je mal compris l'usage du mot clef extern ?
    (Je précise que je travaille sur un Arduino, et qu'il n'y a pas de fonction main() sur ce matériel, mais 2 fonctions : setup() et loop())

    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
     
    /*
     * Code principal
     */
     
    #include <toto.h>
     
    void setup()
    {
           variable1 = 1;
           variable2 = 10;
    }
     
    void loop()
    {
         ...
    }
    Merci

  2. #2
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Hello,

    Citation Envoyé par zebulon36 Voir le message
    (Je précise que je travaille sur un Arduino, et qu'il n'y a pas de fonction main() sur ce matériel, mais 2 fonctions : setup() et loop())
    C'est pas une raison pour faire ce genre de choses ><

    Ignore la fonction loop et considere que setup est la fonction main. Si tu as du mal à l'imaginer, une macro du genre peut aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    #define main() loop() {} void setup()
     
    void main() {
       std::cout << "ffff you Arduino, I want a main function." << std::endl;
    }
     
    #undef main

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Je pense pas qu'Arduino soit différent que le langage normal.
    Une variable doit être déclarée. Tu l'utilises alors qu'elle ne l'est pas.
    extern indique que la variable existe et sera déclarée dans un autre fichier.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    /*
     * Code principal
     */
     
    #include <toto.h>
    uint32_t variable1;
    uint8_t variable2;
    void setup()
    {
           variable1 = 1;
           variable2 = 10;
    }
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  4. #4
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2014
    Messages
    345
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2014
    Messages : 345
    Par défaut
    Les variables sont déclarées mais pas définies.
    Je trouve ça bizarre, il y aurait du y avoir une erreur lors du link et non à la compilation.

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    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 : 5 202
    Par défaut
    Effectivement, elles doivent être définies une et une seule fois. En général, dans une unité de compilation dédiée, éventuellement le main.

  6. #6
    Expert éminent
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 394
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 394
    Par défaut
    Si c'est du C++, ne peux-tu pas utiliser des variables statiques de classe à la place?
    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.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Juin 2010
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2010
    Messages : 33
    Par défaut [RESOLU] Problème de portée pour une variable déclarée extern
    Bonjour,

    Merci Boosk > ca marche tel que tu l'indiques.
    Et j'ai mieux pigé le fonctionnement de extern grace à toutes les réponses.

    Cordialement,

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

Discussions similaires

  1. [AC-2010] Portée d'une variable déclarée en public
    Par nde1303 dans le forum VBA Access
    Réponses: 4
    Dernier message: 07/10/2012, 17h02
  2. Réponses: 9
    Dernier message: 19/03/2010, 08h15
  3. Portée d'une variable globale
    Par Giill dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 27/12/2005, 10h13
  4. [Tomcat] définir un port pour une application
    Par Mrlud dans le forum Tomcat et TomEE
    Réponses: 10
    Dernier message: 14/06/2005, 17h33
  5. Réponses: 6
    Dernier message: 08/06/2004, 14h22

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