C++:
Schrijven naar standaardfout
Hoe:
C++ gebruikt cerr voor het schrijven naar stderr. Hier is hoe je het gebruikt:
#include <iostream>
int main() {
std::cout << "Dit is reguliere uitvoer" << std::endl;
std::cerr << "Dit is een foutmelding" << std::endl;
return 0;
}Een voorbeelduitvoer zou er zo uitzien:
Dit is reguliere uitvoer
Dit is een foutmeldingZelfs als je stdout omleidt, blijft stderr zichtbaar in de terminal:
// Leidt stdout om naar een bestand, maar stderr blijft zichtbaar in de terminal
int main() {
freopen("uitvoer.txt", "w", stdout);
std::cout << "Dit wordt niet weergegeven in de terminal" << std::endl;
std::cerr << "Dit wordt wel weergegeven in de terminal" << std::endl;
fclose(stdout);
return 0;
}Diepere Duik:
In UNIX-achtige systemen is stderr geïntroduceerd om programmuitvoer (stdout) te scheiden van foutmeldingen, elk met zijn eigen bestandsdescriptor (1 voor stdout, 2 voor stderr). Alternatieven voor cerr zijn het gebruik van fprintf(stderr, ...) in C of rechtstreeks schrijven naar bestandsdescriptor 2. Intern is cerr een instantie van ostream en is ongebufferd om directe foutuitvoer te garanderen zonder te wachten tot de buffer vol is.