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 :

portée de #define


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut portée de #define
    Voila, je voudrais savoir la potée de #define ?

    Car je fais un programme en plusieurs fichiers et dans le principale je mets par exemple #define Nombre_Race 13, puis si dans un autre fichier j'utilise Nombre_Race, il ne la connait plus, mais si je remets le define, il me dit alors un warning de redefine, je suis donc obligé de faire un #ifndef Nombre_Race.

  2. #2
    Membre confirmé Avatar de hamster
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    137
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 137
    Par défaut
    tu devrais créer un fichier *.h avec tes #define blabla 13 et inclure ce fichier dans les autres, comme ça tu es tranquille

  3. #3
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    La portée d'une macro ne dépasse pas le fichier dans lequel elle est définie. Sauf si bien sûr tu inclues celui-ci dans d'autres fichiers.

    A part ça, tu devrais utiliser des constantes et non des macros.

  4. #4
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Alors en utilisant des constante externe, je pourrais les déclarer seulement dans le fichier principale ?

  5. #5
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    Citation Envoyé par Azharis
    Alors en utilisant des constante externe, je pourrais les déclarer seulement dans le fichier principale ?
    attention : en C++ les constants sont static donc leur porté se limite aussi au fichier

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    Elle se limite au fichier même si je les déclare extern :

    extern int ExternVar; par exemple

    sinon, pour les structure et les enum, ca se limite aussi au fichier ?

    en fait, mon problème c'est que j'utilise plusieurs fichiers car j'ai plusieurs classes différentes, j'ai aussi des tableaux de constante. J'aurais voulu les déclarer une seule fois au début et que ca couvre tout le programme. Est-ce possible? Sinon je mets tout dans un fichier d'en-tête que j'inclus dans chaque fichier.

    Merci de votre aide.

  7. #7
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    Citation Envoyé par Azharis
    extern int ExternVar; par exemple
    ça ce n'est pas une constante

    Citation Envoyé par Azharis
    Sinon je mets tout dans un fichier d'en-tête que j'inclus dans chaque fichier.
    oui, c'est ce que t'as suggégé hamster.
    Attention à ne pas mettre de variables globales dans un fichier d'entête (que des constantes), ni de code (à part les fonctions "inline")

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    et pour les enum et les struct ?

  9. #9
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    Citation Envoyé par Azharis
    et pour les enum et les struct ?
    à mettre dans le fichier d'entête

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2005
    Messages
    230
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 230
    Par défaut
    C'est bon, tout marche beaucoup mieux, merci.

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

Discussions similaires

  1. portée d'un #define
    Par gigiskhan dans le forum Débuter
    Réponses: 6
    Dernier message: 18/09/2009, 13h31
  2. Portée d'un #DEFINE
    Par raplapente dans le forum Débuter
    Réponses: 6
    Dernier message: 16/07/2009, 17h11
  3. Portée des #define
    Par muad'dib dans le forum C
    Réponses: 3
    Dernier message: 14/09/2007, 14h11
  4. Portée des constantes déclarées avec define
    Par Anduriel dans le forum Langage
    Réponses: 1
    Dernier message: 10/04/2006, 22h03
  5. Portée de la directive $DEFINE insuffisante
    Par copeau31 dans le forum Langage
    Réponses: 6
    Dernier message: 14/03/2006, 16h07

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