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 :

[Préprocesseur] #define #if


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 7
    Par défaut [Préprocesseur] #define #if
    Bonjour,

    j'essaye de définir différents modes de compilation par le biais d'un enum et d'une constante define. J'effectue ensuite un test sur cette constante pour définir tout ce dont j'ai besoin.

    Pour être plus clair, voici le code exemple correspondant :

    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
    enum {
      TOTO1,
      TOTO2,
      TOTO3,
      TOTO4
    };
     
    #define COMPILATION TOTO2
    #if (COMPILATION == TOTO1)
      #define VARIABLE 0
      ...
    #else
      #define VARIABLE 1
      ...
    #endif
    Il ne s'agit là que d'un exemple mais j'aimerais comprendre pourquoi après tout ceci VARIABLE vaut 0.

    Merci d'avance pour votre aide précieuse.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Citation Envoyé par TonyEgg62 Voir le message
    Il ne s'agit là que d'un exemple mais j'aimerais comprendre pourquoi après tout ceci VARIABLE vaut 0.
    Parce que ça ne marche pas aussi simplement.
    Le préprocesseur a un fonctionnement trivial. Quand tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define COMPILATION TOTO2
    Il en déduit: remplacer partout où je trouve COMPILATION par TOTO2
    Puis quand tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #if (COMPILATION == TOTO1)
    Il transforme en:
    Et là (attention c'est le préprocesseur et pas le compilateur), il fait: TOTO2 pas défini, TOTO1 pas défini, donc TOTO2 pareil que TOTO1. D'où #define VARIABLE 0 qui est choisi!

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 7
    Par défaut
    Citation Envoyé par 3DArchi Voir le message
    Et là (attention c'est le préprocesseur et pas le compilateur), il fait: TOTO2 pas défini, TOTO1 pas défini, donc TOTO2 pareil que TOTO1. D'où #define VARIABLE 0 qui est choisi!
    J'ai lu ici : http://msdn.microsoft.com/en-us/library/teas0593.aspx que lorsque tu écrit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define WIDTH 80
    #define LENGTH (WIDTH + 10)
    var = LENGTH * 20;
    on obtient bien var = 280. Cela montre bien que WIDTH + 10 est à son tour remplacé par 80. Pourquoi dans mon cas les TOTO1 et 2 ne sont pas remplacés par leur valeur respective dans l'énumération?

    Merci encore pour votre temps.

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

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

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Le préprocesseur passe avant toute compilation, dans une phase préliminaire. Donc il peut voir des éléments qui font partie du préprocesseur lu même (les #define), mais les autres éléments du langage (les enum, par exemple) n'ont aucune signification pour lui..
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2005
    Messages : 7
    Par défaut
    Merci pour vos réponses, tout s'éclaire !!

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

Discussions similaires

  1. L'instruction au préprocesseur #define
    Par couillotte dans le forum Débuter
    Réponses: 9
    Dernier message: 18/11/2008, 14h42
  2. Directive préprocesseur #define
    Par Altrensa dans le forum C
    Réponses: 12
    Dernier message: 29/11/2007, 17h53
  3. USER DEFINE FONCTION : PB éxécution requête
    Par juelo dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 26/01/2004, 11h12
  4. Define sur plusieurs lignes
    Par Gogoye dans le forum C
    Réponses: 6
    Dernier message: 06/10/2003, 11h45
  5. define avec GCC.
    Par vagabon dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 12/06/2003, 14h04

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