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 de precompilation dans le header


Sujet :

C

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut Directive de precompilation dans le header
    Bonjour à tous,

    Un petit post pour une question qui me parait bête mais je n'arrive pas à trouver de solution. J'aimerai, pour des soucis de compatibilité, définir une structure de deux façons différentes dans un .h, une quand je compile sous UNIX, une pour Linux.
    Dans mon makefile généralement, j'utilise alternativement l'option -DCPU=UNIX et -DCPU=Linux suivant ma plateforme. Dans mes .c, je n'ai aucun problème mais là, dans un .h, cette façon de faire n'a pas l'air de marcher. Voici la solution que j'avais mise en place (et qui ne marche pas) :
    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
    16
    17
    18
    19
    #if (CPU == Linux)
    typedef struct
    {
        toto_UNSIGNED   label:8;	  /* 0-7   */
        toto_UNSIGNED   sdi:2;	  /* 9-10  */
        toto_UNSIGNED   data:19;	  /* 11-27 */
        toto_UNSIGNED   ssm:2;	  /* 29-30 */
        toto_UNSIGNED   parity:1;	  /* 31-31 */
    } SWord;
    #else
    typedef struct
    {
        toto_UNSIGNED  parity:1;    /* 31-31 */
        toto_UNSIGNED  ssm:2;       /* 29-30 */
        toto_UNSIGNED  data:19;     /* 11-27 */
        toto_UNSIGNED  sdi:2;       /* 9-10  */
        toto_UNSIGNED  label:8;     /* 0-7   */
    } SWord; 
    #endif
    J'ai beau fouiller les tutos d'aide sur les directives de précompilation, je n'avance pas ... donc si j'ai raté un truc, je suis preneur !
    PS : si possible je préfère éviter d'avoir à définir une variable d'environnement spécifique sur une seule des plateformes et faire un #if defined TITI mais si c'est la seule solution, je ferais avec.

  2. #2
    Membre éclairé
    Avatar de bpy1401
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2003
    Messages
    471
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2003
    Messages : 471
    Points : 831
    Points
    831
    Par défaut
    Bonjour Tinkh

    Je ne pense pas que ton problème viennent du .h , mais plutôt de la manière que tu utilise le #if.

    Si je ne me trompe pas, le #if peut faire des comparaisons sur les valeurs numériques, pas sur les chaines de caractère

    j'ai modifier ton .h comme ceci

    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
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
     
    #define Unix     1
    #define Linux    2
     
    #if CPU == Linux
     
    typedef struct
    {
        toto_UNSIGNED   label:8;	  /* 0-7   */
        toto_UNSIGNED   sdi:2;	  /* 9-10  */
        toto_UNSIGNED   data:19;	  /* 11-27 */
        toto_UNSIGNED   ssm:2;	  /* 29-30 */
        toto_UNSIGNED   parity:1;	  /* 31-31 */
    } SWord;
     
    #else
     
    typedef struct
    {
        toto_UNSIGNED  parity:1;    /* 31-31 */
        toto_UNSIGNED  ssm:2;       /* 29-30 */
        toto_UNSIGNED  data:19;     /* 11-27 */
        toto_UNSIGNED  sdi:2;       /* 9-10  */
        toto_UNSIGNED  label:8;     /* 0-7   */
    } SWord; 
     
    #endif
    J'ai essayé, et c'est mieux en rajoutant les deux premières lignes
    Page sur Developpez : http://pbriand.developpez.com

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    21
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2011
    Messages : 21
    Points : 12
    Points
    12
    Par défaut
    Merci bien. En fait grâce à ta réponse, j'ai tilté que le problème venait du fait que dans ce .h, il n'avait pas accès aux #define Linux 10 et #define Unix 100 que j'avais mis ailleurs (car il ne faisait effectivement bien une comparaison numérique). Avec un include, ça va beaucoup mieux

  4. #4
    Membre éclairé
    Avatar de Elijha
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Avril 2003
    Messages
    314
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Avril 2003
    Messages : 314
    Points : 742
    Points
    742
    Par défaut
    Bonsoir,

    Je me permet d'ajouter une petite réponse.
    Il existe des macro pré-définie en fonction des OS et architectures etc. Au lieu de recréer ce qui existe, tu peu utiliser celles existantes (__linux__ ou __unix__).

    Voici un site où les trouver : Pre-defined C/C++ Compiler Macros

    Pour Linux : __linux__
    Pour Unix : __unix__

    Bonne continuation.
    - Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !
    - Travailler dur n'a jamais tué personne, mais pourquoi prendre le risque (Edgar Bergen)

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 18/11/2005, 22h11
  2. redefinir une fonction dans un header
    Par ghostdogpr dans le forum C
    Réponses: 5
    Dernier message: 31/10/2005, 03h25
  3. [TListView] Ajouter un icône de tri dans le header
    Par phplive dans le forum Composants VCL
    Réponses: 1
    Dernier message: 25/09/2005, 13h07
  4. [Mail] Subject dans le header
    Par Tchinkatchuk dans le forum Langage
    Réponses: 1
    Dernier message: 07/09/2005, 09h24
  5. [MFC] image dans un header de CListCtrl
    Par tut dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2003, 15h26

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