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 :

Activer/Désactiver l'affichage des messages


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut Activer/Désactiver l'affichage des messages
    Bonjour,

    Je cherche une solution simple et portable (le plus possible) pour définir une macro permettant d'activer et désactiver l'affichage des messages (typiquement std::cout<<.....).

    J'ai trouvé quelques manière de faire et j'ai retenue celle-ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef DEBUG 
    #define D(x) x
    #else 
    #define D(x)
    #endif
    Sinon, je vois souvent quelque chose de très ressemble avec un do{} while() en plus (ou parfois un for( ; 0 ; ) ) mais je comprends pas l'interêt:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    #ifdef DEBUG 
    #define D(x) do {x} while (0)
    #else 
    #define D(x) do {} while (0)
    #endif
    De manière général si quelqu'un peut me conseiller "la bonne" manière de faire, je suis toute ouïe.

    Merci de votre aide.

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Il me semble que le do {} while(0) permet de :
    - limiter la portée des variables ;
    - faire comme si la valeur est "void".

    Sinon, en C++, on peut écrire une fonction template "debug" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    template<typename T> void DEBUG(const T & t)
    {
          #ifdef DEBUG
                 std::cerr << t << std::endl;
          #endif
    }
    Ce qui te permettra par la même occasion de pouvoir surcharger ta fonction DEBUG pour, par exemple, afficher de manière différentes certains types (surtout pour les pointeurs).

  3. #3
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Pourquoi "templatiser" si tout mes messages ont la même forme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::cout<<"\n\t\t"<<__FILE__<<":"<<__LINE__<<Error: ...";
    Je veux juste definir un moyen pour faire : message d'erreur ON ou OFF (pour que tous les massages d'erreurs s'affichent ou non).

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Tu pourras par exemple donner des objets à ta fonctions pour avoir plus de renseignements sur leur état (?)

  5. #5
    Membre éclairé Avatar de LinuxUser
    Inscrit en
    Avril 2007
    Messages
    857
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 857
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Tu pourras par exemple donner des objets à ta fonctions pour avoir plus de renseignements sur leur état (?)
    OK, j'y songerai plus tard.

    Par contre, j'ai testé les solutions que j'ai citées (ci-dessus) et dans les deux cas rien ne s'affiche.
    Si je fais par exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include "debug.h"
    #define DEBUG 1
    ...
    int main()
    {
      D(std::cout<<"\n Test ";);
     
      return 0;
    }
    Le message ne s'affiche pas.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je n'aime pas trop cette syntaxe

    Pourquoi ne pas faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    #define D(T) std::cout << (T) << std::endl;
     
    D("texte" << 42 << "foo")
    ?

    Cela t'éviteras d'oublier les std::endl

  7. #7
    Membre Expert
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    1 711
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 711
    Par défaut
    Citation Envoyé par Neckara Voir le message
    Il me semble que le do {} while(0) permet de :
    - limiter la portée des variables ;
    - faire comme si la valeur est "void".
    Mais pourquoi ce do while ? Un simple bloc suffirait non ? (reliquat du C peut être ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // assez inutile ici, mais c'est pour l'exemple
    #define DBG(str) { std::cerr << str << std::endl; }

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 026
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 026
    Par défaut
    Je n'ai pas lu en détail, mais cela pourrait être différent si on a des "if" :
    http://stackoverflow.com/questions/1...vs-scope-block

  9. #9
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Citation Envoyé par Iradrille Voir le message
    Mais pourquoi ce do while ? Un simple bloc suffirait non ? (reliquat du C peut être ?)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    // assez inutile ici, mais c'est pour l'exemple
    #define DBG(str) { std::cerr << str << std::endl; }
    Le do while t'indiquera une erreur si tu oublies le ; de fin de ligne, ça peut servir
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

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

Discussions similaires

  1. Comment activer le service d'affichage des messages?
    Par ceroxono dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 02/06/2009, 17h29
  2. [EasyPHP] Désactiver l'affichage des erreurs sous EasyPHP
    Par shub dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 02/12/2007, 08h00
  3. [MySQL] Désactiver l affichage des erreurs
    Par eon-of-the-scorn dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 31/07/2006, 11h49
  4. Réponses: 2
    Dernier message: 05/05/2006, 14h49
  5. Réponses: 2
    Dernier message: 23/03/2006, 10h37

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