C++ Tutorial

Anhang F: cerr und clog

cerr und clog sind, genauso wie cout, Streams, die im Regelfall ihre Ausgabe auf die Standardausgabe ausgeben. Auch sie liegen im std Namensraum. Überall wo bisher der Ausgabestream cout verwendet wurde, kann stattdessen auch der Ausgabestream cerr bzw. clog eingesetzt werden.

Vielleicht taucht nun die Frage auf, warum es diese zusätzlichen Streams dann gibt? Nun, wie aus den Namen der Streams ersichtlich ist, sind diese Streams für die Ausgabe von speziellen Meldungen gedacht. So ist der Stream cerr für die Ausgabe von Fehlermeldungen gedacht und clog für die Ausgabe von Kontrollausgaben, wie z.B. Meldungen zur Verfolgung des Programmablaufs. Der Stream cerr besitzt gegenüber cout und clog noch einen kleinen Unterschied: Die Ausgabe erfolgt hier ungepuffert, d.h., die Ausgabe erfolgt direkt auf die Standardausgabe ohne den Umweg über einen Ausgabepuffer.

#include <iostream>
#include <fsream>
int main ()
{
   // cerr Ausgabe auf Datei umleiten
   std::ofstream out("test.err");
   std::streambuf* sbuf = std::cerr.rdbuf();
   std::cerr.rdbuf(out.rdbuf());
   // Ausgabe in cerr und clog Stream
   std::cerr << "cerr Ausgabe\n";
   std::clog << "clog Ausgabe\n";
   // Umleitung unbedingt wieder aufheben!
   std::cerr.rdbuf(sbuf);
}

Im Beispiel (das Sie jetzt noch nicht komplett verstehen müssen) können Sie sich einmal ansehen, wie z.B. die Ausgabe des cerr Streams in eine Datei test.err umgeleitet wird. Das Prinzip bei dieser Ausgabeumleitung, die übrigens genauso für die Ausgabestreams clog und cout funktioniert, besteht darin, für die cerr Ausgabe den Ausgabepuffer eines Dateistreams zu verwenden.


Copyright 2024 © Wolfgang Schröder
E-Mail mit Fragen oder Kommentaren zu dieser Website an: info@cpp-tutor.de
Impressum & Datenschutz