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

Langage C++ Discussion :

Mot clé préprocesseur dans une macro ?


Sujet :

Langage C++

  1. #1
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut Mot clé préprocesseur dans une macro ?
    Bonsoir, j'aurais voulu savoir s'il était possible de mettre des mots clés préprocesseur dans une macro, exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define COMPILER_MESSAGE(x)    #pragma message(x)
    (ce n'est qu'un exemple j'aurais pu vouloir utiliser une autre commande)
    En l'état ce code ne marche pas le compilo (msvc 2008 pro) me sort :
    error C2162: paramètre formel de macro attendu
    Je suppose qu'il me sort ça car il croit que pragma est un paramètre formel alors que moi je veux utiliser la commande. Est-il possible de faire cela ?
    Enfaite je travail sur un projet qui doit pouvoir être compilé sous GCC et sous MSVC, et j'aimerais utiliser des macros "générique" indépendante du compilateur.
    Ca me permettrai de ne vérifier le compilo utiliser qu'à la création de la macro et pas à chaque fois que je veux utiliser un mot clé préprocesseur non-standard.
    Merci d'avance

  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
    Salut,
    Je ne pense pas dire trop de bêtise en disant que le préprocessing se fait en une seule passe. Tu ne peux donc pas définir une commande de préprocessing dans une autre commande de préprocessing.

  3. #3
    screetch
    Invité(e)
    Par défaut
    sous visual C++ les pragma peuvent aussi s'executer avec __pragma au lieu de #pragma (car en fait #pragma n'est PAS du préprocesseur, c'est une directive de compilation)

    ca fait aussi partie du C99, mais sous GCC c'est implémenté seulement pour le C99 donc pas pour le C++98, voir http://gcc.gnu.org/onlinedocs/cpp/Pragmas.html

    c'est seulement pour les pragma, pour les #include ou les #define dans des macros c'est pas possible

  4. #4
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Merci pour ces réponses, bon et bien je vais utiliser __pragma pour msvc et pour gcc il n'y aura rien en attendant mais au moins j'aurais pas plein de tests préprocesseurs de partout je vais mettre tout ça dans des macros.
    Merci

    Edit : Et bien enfaite non pas de macros ^^ si __pragma marche forcement les arguments d'après (message, warning...) ne sont pas pris en compte et ça fais de jolies erreurs donc pas de macros faut tout écrire en direct. Mais où est le préprocesseur du préprocesseur

  5. #5
    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
    Salut,
    Citation Envoyé par oxyde356 Voir le message
    Mais où est le préprocesseur du préprocesseur
    On peut, par exemple, feinter comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    #if defined OPTION_1
    #define INCLUDE option1.h
    #elif defined(OPTION_2)
    #define INCLUDE option2.h
    ...
    #endif
     
    #include INCLUDE
    option1.H
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #pragma bidule
    etc...
    option2.H
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #pragma chouette
    etc...

  6. #6
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Pas bête du tout en effet, mais trop contraignant pour mon cas, et puis j'imagine même pas le temps de compil avec pleins de fichiers pour chaque #pragma différent
    Merci quand même pour l'astuce si j'ai pas le choix je l'utiliserais !

  7. #7
    screetch
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    #define __STRING2__(x) #x
    #define __STRING__(x) __STRING2__(x)
    #define msg(x) __pragma(message(__FILE__"(" __STRING__(__LINE__) "): " x))
     
    int main(int argc, char* argv[])
    {
    	msg("TODO");
    }
    ca marche tres bien chez moi ca

  8. #8
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    En effet, je ne savais pas qu'il fallait mettre des parantheses avant "message" quand il y a __pragma. Donc oui ça marche pour "message" par contre pas pour d'autre mots clés comme warning.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #define warning(x)	__pragma(warning(disable:x))
    Il reconnait pas le mot clé warning :/ tu as une solution pour ça aussi ?

  9. #9
    screetch
    Invité(e)
    Par défaut
    sans doute car tu as mis en macro le mot-clé que tu utilises
    essaye avec un autre nom pour ta macro

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    #define NO_WARNING(x) __pragma(warning(disable:x))
    NO_WARNING(4189)

  10. #10
    Membre éprouvé Avatar de oxyde356
    Homme Profil pro
    Ingénieur Recherche Imagerie
    Inscrit en
    Février 2006
    Messages
    797
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Recherche Imagerie

    Informations forums :
    Inscription : Février 2006
    Messages : 797
    Points : 1 087
    Points
    1 087
    Par défaut
    Merci xD
    pfff pour le coup j'ai vraiment fais le mauvais
    Bon bin ça m'a l'air de plutôt bien marcher ça merci à vous

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

Discussions similaires

  1. Protection mot réservé dans une macro variable
    Par ignoux dans le forum Macro
    Réponses: 2
    Dernier message: 19/03/2015, 11h52
  2. Nombre de mots dans une macro-variable avec apostrophe
    Par Claudia(y) dans le forum Macro
    Réponses: 2
    Dernier message: 20/10/2013, 20h15
  3. Nombre de mots dans une macro variable
    Par MEGAMIND2 dans le forum Macro
    Réponses: 2
    Dernier message: 10/01/2011, 19h59
  4. Sélection de mots dans une macro variable
    Par delph_le dans le forum Macro
    Réponses: 2
    Dernier message: 02/08/2010, 09h25
  5. [XL-2003] Protéger un mot de passe présent dans une macro
    Par Chevrefeuille dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 22/03/2010, 20h17

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