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

SL & STL C++ Discussion :

cerr << et << endl; qu'est-ce que c'est ?


Sujet :

SL & STL C++

  1. #1
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut cerr << et << endl; qu'est-ce que c'est ?
    J'ai vu plusieurs fois ces choses dans des sources où ça encadrait des commentaires ou des réponses faites à la console : cerr << "\t[filename] is optional local save filename." << endl;
    Pour pouvoir les récuperer dois je les transformer un par un en printf pour que ça compile, ou faut il faire, si c'est possible, un #define qui le fait pour moi à chaque fois ?
    David

  2. #2
    Membre émérite Avatar de HanLee
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    738
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Mai 2004
    Messages : 738
    Par défaut
    C'est du C++, et oui à peu de choses près, il suffit de les remplacer par des printf avec les formateurs qui vont bien (gaffe au typage...).

    endl équivaut à un '\n' + un flush.

  3. #3
    Membre éclairé
    Homme Profil pro
    ingénieur calcul
    Inscrit en
    Décembre 2007
    Messages
    363
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : ingénieur calcul
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Décembre 2007
    Messages : 363
    Par défaut ouais super, merci
    et bonne nuit,
    David

  4. #4
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    487
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 487
    Par défaut
    Citation Envoyé par dva2tlse Voir le message
    J'ai vu plusieurs fois ces choses dans des sources où ça encadrait des commentaires ou des réponses faites à la console : cerr << "\t[filename] is optional local save filename." << endl;
    Pour pouvoir les récuperer dois je les transformer un par un en printf pour que ça compile, ou faut il faire, si c'est possible, un #define qui le fait pour moi à chaque fois ?
    David
    Voulez vous dire cout << "\t[filename] is optional local save filename." << endl;?

  5. #5
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Citation Envoyé par dot-_-net Voir le message
    Voulez vous dire cout << "\t[filename] is optional local save filename." << endl;?
    Non, cerr existe aussi...

    Il y a trois flux standard:
    • l'entrée standard ("typiquement" le clavier)
    • la sortie standard ("typiquement" l'écran)
    • l'erreur standard (qui mène par défaut à la sortie standard)

    L'entrée standard est "cin", et, si j'ai écrit que c'est "typiquement" le clavier, c'est parce qu'elle peut être redirigée de manière à prendre les informations ailleurs (écran tactile, et de manière générale, de n'importe quel périphérique d'entrée ...)

    La sortie standard est "cout" et elle peut être redirigée de manière àenvoyer les information ailleurs (tablettes braille, synthétiseur vocaux, voire, une imprimante, et, de manière générale vers n'importe quel périphérique de sortie...)

    l'erreur standard est "cerr" et, si elle affiche par défaut les informations dans la sortie standard, elle peut être redirigée de manière à envoyer les informations vers n'importe quel périphérique de sortie, sans modifier la destination de la sortie standard.
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    std::clog est également une sortie standard.

  7. #7
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    Citation Envoyé par Laurent Gomila Voir le message
    std::clog est également une sortie standard.
    Ah, je la connaissait pas, celle-là

    Je présumes que, comme son nom l'indique, elle part typiquement directement vers un fichier "log"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    Non, vers la console aussi.
    A ce propos, quelqu'un sait comment bien rediriger une des sorties standard? Il suffit de la faire pointer sur un autre buffer on est d'accord, mais il semblerait que ça pose problème avec le cycle de vie des objets.

  9. #9
    Expert éminent
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 635
    Par défaut
    D'apres les essais que j'ai faits, si tu redirige le flux directement dans main, tu ne semble pas avoir de problème particulier, du moins pour les redirections permanentes:

    Sous mingw, les fichiers suivants
    LaClass.h
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #ifndef LACLASS_H
    #define LACLASS_H
     
    class LaClass
    {
        public:
            LaClass();
            virtual ~LaClass();
            void fonction();
        protected:
        private:
    };
     
    #endif // LACLASS_H
    LaClass.cpp
    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
    #include "LaClass.h"
    #include <iostream>
    using namespace std;
    LaClass::LaClass()
    {
        cout<<"constructeur de la classe"<<endl;
    }
     
    LaClass::~LaClass()
    {
        cout<<"destructeur de la classe"<<endl;
    }
    void LaClass::fonction()
    {
        cout<<"dans la fonction membre"<<endl;
    }
    main.cpp
    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
    #include "LaClass.h"
    #include <iostream>
    #include <fstream>
    using namespace std;
    void function()
    {
        cout<<"dans fonction"<<endl;
    }
    int main()
    {
        ofstream ofs("log.txt");
        /* commenté pour éviter un avertissement et pour que la redirection reste
         * active lors de l'écriture demandée dans le destructeur de LaClass
         */
        //streambuf *save=cout.rdbuf();
        cout.rdbuf(ofs.rdbuf());
        cout<<"dans main"<<endl;
        function();
        LaClass c;
        c.fonction();
        return 0;
    }
    fournissent à l'exécution un fichier log.txt qui contient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    dans main
    dans fonction
    constructeur de la classe
    dans la fonction membre
    destructeur de la classe
    car le cycle de vie des objets est, de facto, celui de l'application

    Là où les problèmes pourraient apparaître, c'est dans le cas de redirections temporaires...

    Je présumes que les meilleures solutions passeront par des variables statiques/globales
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 292
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 292
    Par défaut
    Citation Envoyé par koala01 Voir le message
    Je présumes que, comme son nom l'indique, elle part typiquement directement vers un fichier "log"
    stderr ou stdout par défaut, je ne sais plus.

    Sinon, les flux se redirigent, filtrent, etc. en jouant avec les streambuf.
    Cf les articles sur le site d'Angelika Langer, boost.iostreams, la FAQ de fclc++, ...
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

  11. #11
    Expert confirmé

    Inscrit en
    Novembre 2005
    Messages
    5 145
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 5 145
    Par défaut
    Citation Envoyé par Luc Hermitte Voir le message
    stderr ou stdout par défaut, je ne sais plus.
    stderr mais avec bufferisation (cerr n'est pas bufferise).

  12. #12
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par zais_ethael Voir le message
    Non, vers la console aussi.
    A ce propos, quelqu'un sait comment bien rediriger une des sorties standard? Il suffit de la faire pointer sur un autre buffer on est d'accord, mais il semblerait que ça pose problème avec le cycle de vie des objets.

    http://cpp.developpez.com/faq/cpp/?p...SL_redirection

  13. #13
    Membre émérite
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    1 064
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 1 064
    Par défaut
    J'étais loin de m'imaginer que ça figurait dans la faq

  14. #14
    yan
    yan est déconnecté
    Rédacteur
    Avatar de yan
    Homme Profil pro
    Ingénieur expert
    Inscrit en
    Mars 2004
    Messages
    10 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur expert
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2004
    Messages : 10 035
    Par défaut
    Citation Envoyé par zais_ethael Voir le message
    J'étais loin de m'imaginer que ça figurait dans la faq
    C'est ce que je me dit aussi à chaque fois que l'on me répond

Discussions similaires

  1. Surcharge d'opérateur << et std::endl;
    Par Tourix dans le forum SL & STL
    Réponses: 7
    Dernier message: 29/06/2006, 17h58
  2. Rediriger cerr vers un fichier
    Par insomniak dans le forum C++
    Réponses: 15
    Dernier message: 30/05/2006, 08h27
  3. std::endl c'est quoi ??
    Par elekis dans le forum SL & STL
    Réponses: 8
    Dernier message: 14/09/2005, 17h15
  4. [Console] Tampon de sortie et endl
    Par Évariste Galois dans le forum C++
    Réponses: 18
    Dernier message: 09/07/2005, 17h48
  5. Rediriger cerr<< ver un MessageBox
    Par philippe V dans le forum C++
    Réponses: 3
    Dernier message: 22/12/2004, 16h23

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