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 :

Déclaration de Variables


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut Déclaration de Variables
    Bonjour tout le monde,
    j'ai commencé un petit projet de c embarqué mais je ne suis pas un pro de ce langage. J'ai un doute sur la manière de déclarer certaines de mes variables.
    Je vous explique, j'ai une variable, Timeout, que j'utilise dans plusieurs de mes .c, et je me pose la question de l'endroit où la déclarer car je me suis laissé entendre qu'il ne fallait la déclarer qu'une seule fois (merci de confirmer ou d'infirmer ce point car je ne suis pas sur).

    Je l'ai donc déclarée dans le fichier 1.h, car je l'utilise dans le 1.c et là pas de problème, par contre dans le 2.c où j'utilise aussi la variable le compilo m'indique:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    symbol 'Timeout' has not been defined
    J'ai essayer d'inclure le 1.h dans le 2.c mais le compilo me renvoyait cette erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error - symbol 'Timeout' has multiple definitions.
    Donc j'ai défini Timeout dans le fichier 2.h en tant qu'extern et cela fonctionnait.
    Seulement je ne sais pas si j'ai le droit de le faire, et ça me pose un problème car dans la suite de mon projet je vais devoir déclarer un grand nombre de variables et je préférerai n'avoir à le faire qu'une seule fois.
    J'espère avoir été claire.
    Merci pour votre aide
    Guilermo

  2. #2
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    La façon la plus propre de faire est de passer par les déclaration extern. Une des techniques et de regroupé les fonctions qui en ont besoin dans un nombre restreint d'unité de compilation.

    Aussi, lorsque tu déclare une varirable "extern", en faite tu demande au linker de lier (~remplacer) cette variable à une déjà déclarer dans une autre unité de compilation.

    Une autre solution est de ne faire qu'une seule unité de compilation. Je te le déconseille cela dit.
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  3. #3
    Expert éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Points : 17 916
    Points
    17 916
    Billets dans le blog
    2
    Par défaut
    alors on a le choix effectivement de déclarer les variables en externes ou non..

    Il est cependant fortement déconseillé des les mettre dans des .h..


    Une variable declarée (globale) dans un module sera accessible par un "extern" dans un autre module.


    Cependant, la meilleure pratique consiste, si on a besoin de cette gymnastique de variables (surtout si il y en a plus d'une) entre modules à les passer en paramètres aux fonctions qui en ont besoin, soit directement, soit par le biais de structures...
    "Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle".

    Consultant indépendant.
    Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie.
    C, Fortran, XWindow/Motif, Java

    Je ne réponds pas aux MP techniques

  4. #4
    Membre confirmé Avatar de Lavock
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    560
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 560
    Points : 633
    Points
    633
    Par défaut
    Un autre truc que j'ai vu une ou deux fois, c'est de déclarer une structure Global, et de "l'importer" dans les autres modules grâce au mot clef extern. Je ne saurais dire si ce genre de pratique est recommandable ou non.

    PS : évidemment, cela vaut si tu as vraiment besoins de variable global. Dans la majeur partie des cas, c'est le cas pour si tu veux passer des variables entre interruption et le reste du système. Sinon, il y a généralement moyens de s'en passer.
    The mark of the immature man is that he wants to die nobly for a cause, while the mark of the mature man is that he wants to live humbly for one.
    --Wilhelm Stekel

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    24
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2009
    Messages : 24
    Points : 20
    Points
    20
    Par défaut
    Merci pour votre aide,
    Une autre solution est de ne faire qu'une seule unité de compilation. Je te le déconseille cela dit.
    Cette suggestion est intéressante Lavock, mais chacune des unités de compilation doit pouvoir être utilisées pour un autre projet sans y apporter de modification,et c'est beaucoup plus lisible je trouve.

    Cependant, la meilleure pratique consiste, si on a besoin de cette gymnastique de variables (surtout si il y en a plus d'une) entre modules à les passer en paramètres aux fonctions qui en ont besoin, soit directement, soit par le biais de structures...
    Je vais essayer de le mettre en application cette méthode.
    Je vous tiens au courant sur l'avancement de mon problème.

    Merci

    Guilermo

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

Discussions similaires

  1. déclaration de variable public
    Par mathieu57 dans le forum MFC
    Réponses: 5
    Dernier message: 15/09/2005, 17h36
  2. [DB2] Ordre de déclaration des variables
    Par Fatah93 dans le forum DB2
    Réponses: 1
    Dernier message: 04/05/2005, 17h18
  3. déclaration de variables de 16, 32 et 128 bits
    Par samipate dans le forum C++
    Réponses: 10
    Dernier message: 30/12/2004, 22h33
  4. [FLASH MX2004] Déclaration de variables sous flash mx
    Par softyClochette dans le forum Flash
    Réponses: 4
    Dernier message: 29/11/2004, 16h11
  5. [debutant][Portée] Déclaration de variable .....
    Par Slein dans le forum Langage
    Réponses: 4
    Dernier message: 07/05/2004, 10h43

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