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 :

#define directive pour compilation conditionnée


Sujet :

C++

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut #define directive pour compilation conditionnée
    Bonjour,
    J'ai un problème et je cherche une solution légère (peut contraignante).
    Je développe une librairie sur linux et dans une de mes classe je fais des affichage basiques avec std::cout. Sauf que j'aimerai que l'utilisateur reste maitre de ces affichage. Oublions une minute le principe de librairie. J'aimerai que l'utilisateur puisse lire dans la documentation que je fournirai " définie la constante DEBUG_ACTIF pour pouvoir profiter des sortie std::cout. Ainsi si l'utilisateur fait au tout debut de son main : . Il bénéficira des affichages en console. et donc dans mes classe j'entoure tous mes std::cout <<..... par des jolis :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #ifdef DEBUG_ACTIF
    std::cout << ... << std::endl
    #endif
    sauf que sa ne marche pas. J'ai appris que les #define ne sont pris en compte par le préprocesseur uniquement dans le fichier ou il est présent et dans les fichiers qui incluent le fichier ou il est présent. Sauf que biensur si l'utilisateur définie cette directive dans son main (en debut de programme) je ne peux pas me permettre d'inclure le main dans tout mes fichiers qui utilise cette directive. Je cherche donc une altérnative à cela qui ne me couterai pas trop cher .
    Evidemment une solution avec le préprocesseur serai parfaite .

    Merci de votre aide

  2. #2
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    Il suffira au client de compiler en définissant la macro en option préprocesseur.
    Sous gcc avec le paramètre -Dmacro[=defn];

    ps : library est un faux ami. On parle de bibliothèque en français

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    Merci beacoup pour la reponse .
    Librairie n'est pas un faux ami puisque c'est un mot français, je ne vois pas ou j'utilise le mot anglais à savoir LIBRAIRY.

    je n'est pas trés bien compris la syntaxe du parametre -Dmacro. J'ai recherché sur google sans avoir trouver ce parametre propre a gcc. Pourrais tu apporter plus d'information a ce sujet ? Merci encore .

    EDIT : C'est bon j'ai rajouter donc dans ma ligne de commande pour compiler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ main.cpp ................... -Dmacro=DEBUG_ACTIF
    par contre lorsque j'execute sa ne marche pas .... Ai-je compris la marche a suivre ?

  4. #4
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    C'est un faux amis puisque le mot anglais est library mais la traduction française est bibliothèque! et on parle uniquement de bibliothèque, pas de librairie (c'est là qu'on va chercher les bouquins :p).

    pour la syntaxe (un coup de man gcc t'aurais aidé soit dit en passant, surtout que j'ai respecté leur syntaxe) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ -DDEBUG_ACTIF foo.cpp

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    195
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 195
    Points : 115
    Points
    115
    Par défaut
    Bonjour et merci.
    Merci pour le parametre de ligne de commande je n'avais pas bien compris pour sa syntaxe maintenant sa marche effectivement.
    Pour librairie c'est vrai tu as raison sa répartition sur le net et sa ressemblance avec library y sont pour beacoup de chose.

    Merci beacoup sujet résolu

  6. #6
    Membre expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Points : 3 284
    Points
    3 284
    Par défaut
    Le probleme avec ce genre de solution c'est que tu es obligé de recompiler pour activer/desactiver tes traces.


    peu etre voir la possibilité d'utiliser un tracer logger bien paramétré.

  7. #7
    Membre chevronné
    Avatar de Goten
    Profil pro
    Inscrit en
    Juillet 2008
    Messages
    1 580
    Détails du profil
    Informations personnelles :
    Âge : 34
    Localisation : France

    Informations forums :
    Inscription : Juillet 2008
    Messages : 1 580
    Points : 2 205
    Points
    2 205
    Par défaut
    En effet j'ai juste répondu à la problèmatique, mais il est vraie que sur un projet conséquent c'est le genre de solution le plus adéquat, un systéme de log serait beaucoup plus intéressant amha!

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

Discussions similaires

  1. [Free Pascal] Directives de compilation pour profiter d'un processeur arithmétique
    Par NOVICE76 dans le forum Free Pascal
    Réponses: 1
    Dernier message: 06/10/2014, 14h59
  2. [MVVM] Directive de compilation pour un ViewModel
    Par DotNET74 dans le forum Windows Phone
    Réponses: 10
    Dernier message: 18/04/2013, 18h33
  3. Directives de compilation pour g++
    Par Jfrancois57 dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 09/11/2005, 12h23
  4. directive de compilation
    Par gandf dans le forum C++Builder
    Réponses: 4
    Dernier message: 12/02/2005, 11h46
  5. Directives de compilations.
    Par ushu dans le forum Langage
    Réponses: 2
    Dernier message: 28/01/2003, 11h44

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