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 :

Différence d'affichage entre la sortie standard et la sortie d'erreur standard


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 25
    Par défaut Différence d'affichage entre la sortie standard et la sortie d'erreur standard
    Bonjour , ma question concerne l'affichage en C++ .

    Voilà, j'ai vu les fonctions d'affichages suivantes en C++
    cout -> sortie standard
    cerr -> sortie standard d'erreur sans tampon
    clog -> sortie standard d'erreur avec tampon

    Pourtant lorsque je remplace dans un programme cout par cerr je ne constate aucune différence et l'afficahge se fait. Aussi je me demande si quelqu'un connaîtrait du code mettant en valeur la différence entre les fonctions cout et cerr et la présence ou non de tampon ?
    Cela me permettrait de mieux connaître les effets de ces fonctions.

    En vous remerciant par avance.

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 600
    Par défaut
    Bonjour,

    Si on lance une application en redirigeant la sortie standard, on voit la différence entre la sortie standard et la sortie erreur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonApplication > standard.txt
    Les cout iront dans le fichier standard.txt, et les clog et cerr seront affichées à la console.

    Pour voir la différence avec et sans tampon, il suffit d'écrire un unique caractère avec std::cerr ou avec std::clog, et le caractère est écrit immédiatement, ou bien il faut attendre un flush()

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

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 644
    Par défaut
    Salut,

    On pourrait dire cela :

    Par défaut, il se peut que les différentes sorties standard soient dirigée vers le même périphérique, mais tout va en réalité dépendre du système sur lequel ton application va être exécutée.

    Il se peut -- en effet -- que ton système fasse de "lui-même" la distinction entre les différentes sorties, ou, à tout le moins, qu'il te permette de rediriger certaines d'entre-elles seon tes besoin.

    Sous linux, par exemple, une commande proche de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    maCommande > normal.log 2 &1> error.log
    ayant pour résultat de rediriger la sortie "normale" de l'appliction vers normal.log et les erreurs (et les avertsissements) ver error.log

    Si la bibliothèque standard propose différents flux de sortie, c'est -- d'abord et avant tout -- pour ceal

    Mais ce genre de redirection reste malgré tout "à discrétion" de l'utilisateur, en plus de n'être disponible que si le système sur lequel tu l'exécute les supporte

    Or, il se peut que tu veuilles, en tant de développeur de ton application, rediriger les sorties -- ou seulement certaines d'entre elles --, qui se feraient normalement sur "la sortie standard" (faisons simple : sur l'écran "console") vers "d'autres flux" (comme un fichier de log, par exemple).

    En ajoutant à l'existence de plusieurs "sorties standard" le fait de permettre au développeur de rediriger n'importe quel flux vers un autre, la bibliothèque standard nous arme parfaitement pour faire face à "toutes les éventualités"
    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

  4. #4
    Membre averti Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 25
    Par défaut
    Merci pour la différence de clog et cerr avec cout, je pense avoir compris.

    En revanche, j'ai du mal à faire la distinction entre clog et cerr, avec et sans tampon. J'essaye de n'écrire qu'un seul caractère et pourtant les 2 apparaissent en sortie, voici ce que j'ai fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    using namespace std;
     
    #include <iostream>
     
    int main()
    {
            cerr<<"x"<<endl;
            clog<<"y"<<endl;
     
            return 0;
    }
    j'obtiens:
    x
    y
    En revanche j'ai essayé le code suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    using namespace std;
     
    #include <iostream>
     
    int main()
    {
            cerr<<"x";
            cout<<"y";
            clog<<"z";
     
            return 0;
    }
    et j'obtiens cette fois en sortie: xzy , un changement dans l'ordre.

    Pouvez-vous m'expliquer ce qui se passe et comment distinguer les effets de cerr et clog dans mon programme ?

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 600
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 600
    Par défaut
    C'est utiliser en même temps deux flux qui s'appuient sur le même device qui amène à une chronologie bizarre.
    Les données sont soit transférées immédiatement, soit transférées au moment du flush d'où l'inversion. (et il y un flush automatique à certain moments, dont la fin du programme ou quand le buffer est trop plein)

  6. #6
    Membre averti Avatar de CaptainKrabs
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2018
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2018
    Messages : 25
    Par défaut
    D' accord merci je pense avoir compris l'idée globale avec ou sans buffer, j'imagine du coup qu'on pourrait voir la différence dans mon programme en "empêchant" un flush, ainsi seul le cerr afficherait quelque chose en sortie du programme ?

Discussions similaires

  1. [Joomla!] différence d'affichage entre les pages du site
    Par belmar dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 1
    Dernier message: 27/09/2007, 13h30
  2. Différence d'affichage entre IDE et exécution
    Par declencher dans le forum Delphi
    Réponses: 4
    Dernier message: 30/04/2007, 20h41
  3. différence d'affichage entre navigateur dans le CSS
    Par koudji dans le forum Mise en page CSS
    Réponses: 7
    Dernier message: 20/10/2006, 15h39
  4. Différences d'affichage entre IE et FF
    Par Tot-O dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 22/09/2005, 19h47

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