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 :

Directive préprocesseur #define


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Par défaut Directive préprocesseur #define
    Bonjour,

    Je fais appel à vos lumière pour un problème simple.
    En effet, je fais un #define DEBUG au début de mon prog avec ou sans valeur (#define DEBUG 8 ou #define DEBUG tout court). Cependant, ensuite, je le compare à 8 en directive préprocesseur (#if DEBUG == 8) et il me dit dans le cas du #define DEBUG qu'il n'y a aucune valeur à gauche de l'égalité.

    Y-a-t-il un moyen de savoir si une constante préprocesseur à une valeur ou non avant de faire le test pour que celui-ci ne conduise pas à une erreur de compilation ?

    D'avance merci

    Altrensa

  2. #2
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut

    j'ai trouvé une astuce

    tu peux faire un test du genre
    #if (0 * DEBUG + 1)
    #if (DEBUG == 8)
    ...
    #endif
    #endif

    si DEBUG est une chaine ou un nombre
    #define DEBUG alala
    #if (0 * DEBUG + 1) renvoie vrai
    car 0 * alala c'est tranformé en 0 * 0


    alors que si DEBUG est vide
    #define DEBUG
    #if (0 * DEBUG + 1) renvoie faux
    car 0 * DEBUG + 1 est transformé en 0 * +1 qui vaut 0*1 donc qui renvoie faux

    le seul truc que j'ai pas trouvé c'est comment savoir différencier si DEBUG vaut 0 ou si DEBUG est une chaine ?

  3. #3
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    sinon il y a la macro
    ?

  4. #4
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    non

    #define DEBUG
    on a defini DEBUG
    donc #ifndef DEBUG renvoie faux

  5. #5
    Expert confirmé
    Avatar de Thierry Chappuis
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Mai 2005
    Messages
    3 499
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Suisse

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 499
    Par défaut
    Thierry
    "The most important thing in the kitchen is the waste paper basket and it needs to be centrally located.", Donald Knuth
    "If the only tool you have is a hammer, every problem looks like a nail.", probably Abraham Maslow

    FAQ-Python FAQ-C FAQ-C++

    +

  6. #6
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    non c'est pareil

    #define DEBUG
    #if defined(DEBUG)
    renvoie vrai car on a défini DEBUG

    a+

  7. #7
    Membre chevronné Avatar de corentin59
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    462
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 462
    Par défaut
    Citation Envoyé par acx01b Voir le message
    non

    #define DEBUG
    on a defini DEBUG
    donc #ifndef DEBUG renvoie faux
    d'accord, mais n'est-il pas plus classique de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    // on commente cette ligne si on ne veut pas définir DEBUG
    #define DEBUG
    #ifdef DEBUG
    // ce qu'il faut faire si DEBUG est défini
    #endif

  8. #8
    Membre très actif

    Profil pro
    Étudiant
    Inscrit en
    Décembre 2004
    Messages
    499
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2004
    Messages : 499
    Par défaut
    salut

    cette discussion est amusante car beaucoup de gens y participent sans avoir tout lu !

    en quoi ta question est dans le sujet ???

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

Discussions similaires

  1. [Préprocesseur] #define #if
    Par TonyEgg62 dans le forum Débuter
    Réponses: 4
    Dernier message: 19/11/2008, 01h15
  2. L'instruction au préprocesseur #define
    Par couillotte dans le forum Débuter
    Réponses: 9
    Dernier message: 18/11/2008, 14h42
  3. [C de base] Directive Préprocesseur
    Par Altrensa dans le forum Débuter
    Réponses: 5
    Dernier message: 19/10/2008, 02h09
  4. Réponses: 6
    Dernier message: 19/02/2007, 11h13
  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