0Pricing
C++ Academy · Lektion

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>&1

Diagnose- 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

  1. std::cin und std::cout richtig verwenden
  2. Ausgaben mit iomanip formatieren
  3. Eingaben sicher mit getline lesen
  4. Arbeiten mit std::cerr und std::clog
← Zurück zu C++ Academy