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 :

[C de base] Directive Préprocesseur


Sujet :

C

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut [C de base] Directive Préprocesseur
    Bonjour,
    J'aimerai que vous m'aidiez à comprendre les directives préprocesseur. En effet, voici mon problème :

    Cas du fichier main.c :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    #include <stdio.h>
    #define XD DD
    #include "bla.h"
     
    int main()
    {
    #ifdef RENAUD
        int p;
    #endif
    p = 4;
     
    return(0);
    }

    Cas du fichier bla.h :
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #if XD == GLU
        #define RENAUD
    #endif

    Si j'ai bien compris, vu que XD ne vaut pas DD (GLU ici), on ne devrait donc pas déclarer "p" et donc il devrait y avoir une erreur à la compilation. Or, que nenni, comme si tout se passait bien, quelqu'un pourrait m'expliquer ?

    Merci

    @++

    Mick

  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
    Points : 13 017
    Points
    13 017
    Par défaut
    Bonjour
    Soit DD et GLU sont des directives de compilations au niveau du projet, soit ils ne sont pas définis, donc la condition XD == GLU est vrai.

  3. #3
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut
    Salut, en fait j'ai compris d'où venait mon erreur,
    Merci quand même.

  4. #4
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 370
    Points : 23 625
    Points
    23 625
    Par défaut
    Citation Envoyé par Altrensa Voir le message
    Salut, en fait j'ai compris d'où venait mon erreur,
    Merci quand même.
    Fais-en profiter tout le monde, alors, maintenant.

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Altrensa Voir le message
    J'aimerai que vous m'aidiez à comprendre les directives préprocesseur.
    Ton code se résume à :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    #define XD DD
     
    #if XD == GLU
        #define RENAUD
    #endif
    DD n'est pas défini. Vu du pp, il vaut 0.
    GLU n'est pas défini. Vu du pp, il vaut 0.

    Le pp remplace XD par DD :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #if DD == GLU
        #define RENAUD
    #endif
    soit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    #if 0 == 0
        #define RENAUD
    #endif
    ce qui est vrai, donc :
    Ce qui donne le code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    int main()
    {
    int p;
    p = 4;
     
    return(0);
    }
    Pas d'erreur.

    Ne pas confondre #if et #ifdef ...
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Juillet 2007
    Messages
    113
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2007
    Messages : 113
    Points : 73
    Points
    73
    Par défaut
    Autant pour moi, désolé de vous avoir importuné et merci beaucoup.

    Mick

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

Discussions similaires

  1. [SSMS] Accéder aux objets d'une base directement ?
    Par cedric_g dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 07/09/2013, 12h01
  2. Directive préprocesseur #define
    Par Altrensa dans le forum C
    Réponses: 12
    Dernier message: 29/11/2007, 17h53
  3. Réponses: 1
    Dernier message: 29/06/2007, 14h58
  4. Réponses: 6
    Dernier message: 19/02/2007, 11h13
  5. Aller directement dans un objet de la base
    Par jalbec dans le forum Access
    Réponses: 12
    Dernier message: 23/11/2006, 19h45

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