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>&1Output 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
- Uso corretto di std::cin e std::cout
- Formattazione dell'output con iomanip
- Lettura sicura dell'input con getline
- Utilizzo di std::cerr e std::clog