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 :

Macros et preprocesseur


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
    Novembre 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 6
    Par défaut Macros et preprocesseur
    Bonjour,

    j'aimerais porter une appli pc sur pocket pc et pour ce faire j'ai besoin de modifier les headers en fonction de la plateforme.
    Donc mon idée de départ est de faire une macro du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ifndef UNDER_CE
    #define INCLUDE_LOC(x) ("#include" "\"" ## (x) "\"")
    #define INCLUDE_SYS(x) ("#include" "<" ## (x) ">")
    #else
    #define INCLUDE_LOC(x) ("#include" "\"" "portce/" # (x) "\"")
    #define INCLUDE_SYS(x) ("#include" "<" "portce/"  # (x) ">")
    #endif /* UNDER_CE */
     
    INCLUDE_SYS( signal.h )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Cette macro se resoud en 
    #include <signal.h> si sur PC
    sinon
    #include <portce/signal.h>
    mais ca ne fonctionne pas.
    Quelqu'un pourrait m'aider ?

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par mosfet
    j'aimerais porter une appli pc sur pocket pc et pour ce faire j'ai besoin de modifier les headers en fonction de la plateforme.
    Donc mon idée de départ est de faire une macro du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ifndef UNDER_CE
    #define INCLUDE_LOC(x) ("#include" "\"" ## (x) "\"")
    #define INCLUDE_SYS(x) ("#include" "<" ## (x) ">")
    #else
    #define INCLUDE_LOC(x) ("#include" "\"" "portce/" # (x) "\"")
    #define INCLUDE_SYS(x) ("#include" "<" "portce/"  # (x) ">")
    #endif /* UNDER_CE */
     
    INCLUDE_SYS( signal.h )
    Ca ne fonctionne pas (pas de # dans une macro, c'est déjà pris pour autre chose). On fait comme ça :
    et on modifie les réglages de son compilateur pour qu'il aille chercher les includes au bon endroit (-I...).

    On crée 2 projets (ou 2 profiles pour le même projet, c'est encore mieux) ou 2 Makefile ou un Makefile avec des conditions...

    Bref, le travail est fait à l'extérieur là ou il est centralisé, et le code est unique.

  3. #3
    Membre confirmé
    Inscrit en
    Juillet 2002
    Messages
    168
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 168
    Par défaut
    salut,

    #include <stdio.h>

    #define OS PC

    void main()
    {

    #if OS == PC
    #include <signal.h>
    #elif OS == POCKET
    #include <portce/signal.h>
    #endif

    }

    turbo_chess

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

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par turbo_chess
    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
     
    /* -ed- remanie' ... */
    #include <stdio.h>
     
    #define OS  PC
     
    #if OS == PC
    #include <signal.h>
    #elif OS == POCKET
    #include <portce/signal.h>
    #else
    #error This plateform is not yet supported
    #endif
     
    void main()
    {
     
    }
    Il faut définir PC et POCKET. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    #define PC 1
    #define POCKET 2
    Maintenant, il faut envisager ce principe dans un projet avec plusieurs fichiers sources. Il faut probablement un fichier include...

    D'autre part, la définition de OS doit aussi être unique et centralisée...

    L'idéal est qu'elle soit faite sur la ligne de commande du compilateur -DOS=PC ou -DOS=POCKET ce qui est facile à faire dans un Makefile ou avec un IDE...

Discussions similaires

  1. [PARTIELLEMENT*RÉSOLU] macro preprocesseur et largeur de ligne
    Par rogue-spectre dans le forum Fortran
    Réponses: 5
    Dernier message: 16/08/2011, 13h01
  2. [Preprocesseur] macro en string
    Par TabrisLeFol dans le forum C
    Réponses: 2
    Dernier message: 25/01/2007, 18h19
  3. [VBA-E] [Excel] Lancer une macro à une heure donnée
    Par Lysis dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 16/10/2002, 12h15
  4. Qu'est-ce qu'une macro ?
    Par karli dans le forum Assembleur
    Réponses: 2
    Dernier message: 01/09/2002, 03h38
  5. Réponses: 2
    Dernier message: 22/07/2002, 12h13

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