Arbeiten mit std::cerr und std::clog
Trennen Sie Diagnosen und Protokolle mit den Streams cerr und clog von der Programmausgabe.
Arbeiten mit std::cerr und std::clog ist eine kostenlose C++ Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des C++ Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Drei Ausgabestreams
Die Standardbibliothek stellt drei vordefinierte Ausgabestreams bereit:
- std::cout — gepufferte Standardausgabe
- std::cerr — ungepufferte Standardfehlerausgabe
- std::clog — gepufferte Standardfehlerausgabe
std::cerr: Fehler und Warnungen
std::cerr schreibt nach stderr und ist ungepuffert – die Ausgabe erscheint sofort, selbst wenn das Programm direkt danach abstürzt.
std::cerr << "Error: file not found\n";std::clog: Gepufferte Protokolle
std::clog schreibt ebenfalls nach stderr, ist aber wie cout gepuffert. Verwenden Sie es für gewöhnliche Protokolle, bei denen eine geringe Verzögerung akzeptabel ist.
std::clog << "[info] processing record 42\n";Warum zwei Datenströme für stderr?
Fehler müssen sofort erscheinen, damit die Benutzer sie vor einem Absturz sehen. Protokolle fallen in großer Menge an – durch das Puffern bleibt die Leistung akzeptabel.
Ausgabe umleiten
In der Befehlszeile werden stdout und stderr an separate Kanäle gesendet. Leiten Sie sie unabhängig voneinander um.
# Send stdout to a file, stderr to the terminal
./app > out.txt
# Send stderr to a file too
./app 2> err.txt
# Send both to one file
./app > all.txt 2>&1Diagnose- und Datenausgabe
Konventionell werden maschinenlesbare Daten nach stdout geschrieben, während menschlich lesbare Diagnosemeldungen nach stderr gehen. Dadurch funktionieren Pipelines zuverlässig.
Datenströme miteinander verknüpfen
cin ist standardmäßig an cout gebunden – beim Lesen aus cin wird cout zuerst geleert. cerr ist auf ähnliche Weise an cout gebunden.
Benutzerdefiniertes Logging mit Stufen
Kapseln Sie clog in Hilfsfunktionen für Log-Stufen wie INFO, WARN und ERROR. So bleiben die Protokollmeldungen einheitlich.
void warn(const std::string& msg) {
std::clog << "[WARN] " << msg << "\n";
}
void error(const std::string& msg) {
std::cerr << "[ERROR] " << msg << "\n";
}Performance: cerr ist langsam
Da cerr bei jeder Operation geleert wird, sind wiederholte Schreibvorgänge langsam. Für umfangreiches Logging sollten Sie clog oder eine spezielle Logging-Bibliothek bevorzugen.
clog manuell leeren
Wenn die Ausgabe von clog beim Debuggen sofort erscheinen soll, leeren Sie den Datenstrom manuell.
std::clog << "checkpoint" << std::flush;In einen Dateistream schreiben
Dieselben Vorgehensweisen funktionieren auch mit Dateistreams. Öffnen Sie eine Protokolldatei mit std::ofstream und schreiben Sie wie bei clog in den Datenstrom.
std::ofstream logFile("app.log");
logFile << "Application started\n";Kurzer Test
Welcher Standarddatenstrom wird nach jedem Schreibvorgang automatisch geleert?
Zusammenfassung
Verwenden Sie std::cout für die normale Ausgabe, std::cerr für dringende ungepufferte Fehler und std::clog für gepufferte Protokolle. Leiten Sie sie in der Shell mit > und 2> unabhängig voneinander um.
Häufig gestellte Fragen
Ist die Lektion „Arbeiten mit std::cerr und std::clog“ kostenlos?
Ja — der vollständige Text von „Arbeiten mit std::cerr und std::clog“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des C++ Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der C++ Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Arbeiten mit std::cerr und std::clog“?
Trennen Sie Diagnosen und Protokolle mit den Streams cerr und clog von der Programmausgabe. Du übst C++ Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um C++ Academy zu starten?
Keine Vorkenntnisse erforderlich. C++ Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Arbeiten mit std::cerr und std::clog“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser C++ Academy-Lektion Code schreiben und ausführen?
Ja. Jede C++ Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- std::cin und std::cout richtig verwenden
- Ausgaben mit iomanip formatieren
- Eingaben sicher mit getline lesen
- Arbeiten mit std::cerr und std::clog