0Pricing
C++ Academy · Lezione

Utilizzo di std::cerr e std::clog

Separi diagnostica e log dall'output del programma usando gli stream cerr e clog

Utilizzo di std::cerr e std::clog è una lezione C++ Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento C++ Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso C++ Academy include 4 lezioni in totale.

Tre stream di output

La libreria standard espone tre stream di output predefiniti:

  • std::cout — output standard con buffer
  • std::cerr — errore standard senza buffer
  • std::clog — errore standard con buffer

std::cerr: Errori e avvisi

std::cerr scrive su stderr ed è non bufferizzato: l'output appare immediatamente, anche se subito dopo il programma va in crash.

std::cerr << "Error: file not found\n";

std::clog: Log bufferizzati

std::clog scrive anch'esso su stderr, ma è bufferizzato come cout. Lo utilizzi per i log ordinari quando una lieve latenza non è un problema.

std::clog << "[info] processing record 42\n";

Perché due stream su stderr?

Gli errori devono apparire immediatamente, così l'utente li vede prima di un crash. I log hanno un volume elevato: memorizzarli nel buffer mantiene le prestazioni a un livello accettabile.

Reindirizzamento dell'output

Sulla riga di comando, stdout e stderr passano attraverso canali separati. Li reindirizzi in modo indipendente.

# 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

Output diagnostico e dati

Per convenzione, i dati leggibili dalle macchine vengono inviati a stdout, mentre la diagnostica destinata all'utente va su stderr. In questo modo le pipeline funzionano correttamente.

Collegare gli stream

cin è collegato a cout per impostazione predefinita: la lettura da cin esegue prima il flush di cout. Anche cerr è collegato a cout.

Logging personalizzato con livelli

Può racchiudere clog in funzioni di supporto per i livelli di log: INFO, WARN, ERROR. In questo modo i messaggi di log restano coerenti.

void warn(const std::string& msg) {
    std::clog << "[WARN] " << msg << "\n";
}

void error(const std::string& msg) {
    std::cerr << "[ERROR] " << msg << "\n";
}

Prestazioni: cerr è lento

Poiché cerr esegue il flush a ogni operazione, le scritture ripetute sono lente. Per il logging intensivo, preferisca clog o una libreria di logging dedicata.

Eseguire manualmente il flush di clog

Se desidera che l'output di clog appaia immediatamente durante il debug, esegua manualmente il flush.

std::clog << "checkpoint" << std::flush;

Scrivere su un file stream

Gli stessi schemi funzionano con gli stream su file. Apra un file di log con std::ofstream e vi scriva come farebbe con clog.

std::ofstream logFile("app.log");
logFile << "Application started\n";

Verifica rapida

Quale stream standard viene sottoposto automaticamente a flush dopo ogni scrittura?

Riepilogo

Utilizzi std::cout per l'output normale, std::cerr per gli errori urgenti non bufferizzati e std::clog per i log bufferizzati. Li reindirizzi in modo indipendente nella shell con > e 2>.

Domande Frequenti

La lezione «Utilizzo di std::cerr e std::clog» è gratuita?

Sì — il testo completo di «Utilizzo di std::cerr e std::clog» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso C++ Academy, passa a CoddyKit PRO. Il corso C++ Academy include 4 lezioni in totale.

Cosa imparerò in «Utilizzo di std::cerr e std::clog»?

Separi diagnostica e log dall'output del programma usando gli stream cerr e clog Eserciti C++ Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare C++ Academy?

Non è richiesta alcuna esperienza precedente. C++ Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Utilizzo di std::cerr e std::clog»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione C++ Academy?

Sì. Ogni lezione C++ Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Uso corretto di std::cin e std::cout
  2. Formattazione dell'output con iomanip
  3. Lettura sicura dell'input con getline
  4. Utilizzo di std::cerr e std::clog
← Torna a C++ Academy