Trabalhar com std::cerr e std::clog
Separe diagnósticos e registos da saída do programa usando os fluxos cerr e clog
Trabalhar com std::cerr e std::clog é uma aula grátis de C++ Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de C++ Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de C++ Academy inclui 4 aulas no total.
Três fluxos de saída
A biblioteca padrão expõe três fluxos de saída predefinidos:
- std::cout — saída padrão armazenada em buffer
- std::cerr — erro padrão sem buffer
- std::clog — erro padrão armazenado em buffer
std::cerr: Erros e avisos
std::cerr escreve em stderr e não usa buffer — a saída aparece imediatamente, mesmo que o programa falhe logo depois.
std::cerr << "Error: file not found\n";std::clog: Registros com buffer
std::clog também escreve em stderr, mas usa buffer como cout. Use-o para registros rotineiros quando uma pequena latência for aceitável.
std::clog << "[info] processing record 42\n";Por que dois fluxos para stderr?
Os erros precisam aparecer imediatamente para que o usuário os veja antes de uma falha. Os registros têm grande volume — armazená-los em buffer mantém o desempenho aceitável.
Redirecionando a saída
Na linha de comando, stdout e stderr são enviados para canais separados. Redirecione-os de forma independente.
# 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>&1Saída de diagnóstico versus dados
Por convenção, os dados legíveis por máquina vão para stdout; os diagnósticos destinados a pessoas vão para stderr. Isso permite que os fluxos de processamento funcionem corretamente.
Vinculando fluxos
cin é vinculado a cout por padrão — ler de cin libera primeiro o buffer de cout. cerr também é vinculado a cout.
Registro personalizado com níveis
Envolva clog em funções auxiliares para definir níveis de registro — INFO, WARN, ERROR. Isso mantém as mensagens de registro consistentes.
void warn(const std::string& msg) {
std::clog << "[WARN] " << msg << "\n";
}
void error(const std::string& msg) {
std::cerr << "[ERROR] " << msg << "\n";
}Desempenho: cerr é lento
Como cerr libera o buffer a cada operação, as escritas repetidas são lentas. Para registros intensivos, prefira clog ou uma biblioteca específica de registro.
Liberando clog manualmente
Se quiser que a saída de clog apareça imediatamente durante a depuração, libere o buffer manualmente.
std::clog << "checkpoint" << std::flush;Escrevendo em um fluxo de arquivo
Os mesmos padrões funcionam com fluxos de arquivo. Abra um arquivo de registro com std::ofstream e envie dados para ele como faria com clog.
std::ofstream logFile("app.log");
logFile << "Application started\n";Verificação rápida
Qual fluxo padrão é liberado automaticamente após cada escrita?
Recapitulação
Use std::cout para a saída normal, std::cerr para erros urgentes sem buffer e std::clog para registros com buffer. Redirecione-os de forma independente no interpretador de comandos com > e 2>.
Perguntas Frequentes
A aula “Trabalhar com std::cerr e std::clog” é grátis?
Sim — o texto completo de “Trabalhar com std::cerr e std::clog” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de C++ Academy, atualize para CoddyKit PRO. O curso de C++ Academy inclui 4 aulas no total.
O que vou aprender em “Trabalhar com std::cerr e std::clog”?
Separe diagnósticos e registos da saída do programa usando os fluxos cerr e clog Você pratica C++ Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.
Preciso ter experiência prévia para começar C++ Academy?
Nenhuma experiência prévia é necessária. C++ Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.
Quanto tempo leva a aula “Trabalhar com std::cerr e std::clog”?
A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.
Posso escrever e executar código nesta aula de C++ Academy?
Sim. Cada aula de C++ Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.
Todas as aulas deste curso
- Usando std::cin e std::cout corretamente
- Formatando a saída com iomanip
- Leitura segura de entradas com getline
- Trabalhar com std::cerr e std::clog