Эта статья пытается пролить некоторый свет на (часто игнорируемый) объект cerr в C++. ‘C’ в Сerr означает “символ” и “err” означает “ошибка”, значит Cerr означает “Ошибка символа”.
Он определен в заголовочном файле iostream и соответствует потоку C stderr. Он имеет очень похожее использование на объект cout (т. е. печать символов на консоли во время выполнения) под потоком stdout.
Различие
Даже при том, что результат обоих cout и cerr одинаков, есть очень тонкое различие между ними, которое мы можем найти в случае использования вышеупомянутых обоих потоков.
Вот пример кода, чтобы показать разницу между ними:
#include<bits/stdc++> using namespace std; int main() { cout << "Hey there, Geek! :: cout" << endl; cerr << "Hey there, Geek! :: cerr" << endl; return 0; }
Оба приведенных выше оператора будут печатать символы, но под разными консолями / контекстом. Взгляните на результат.
Выход:
Hey there, Geek! :: cout
Ошибка выполнения:
Hey there, Geek! :: cerr
Итак, что же можно извлечь из их использования?
Как правило, stdout:: cout должен использоваться для фактического вывода программы, в то время как вся информация и сообщения об ошибках должны быть напечатаны в stderr::cerr.
Например: предположим, что пользователь хочет открыть файл и перенаправить вывод на этот внешний файл. Предположим, что во время выполнения программы (из-за какой-то проблемы) открытие файла выдает ошибку. Чтобы сохранить проверку таких ошибок, разработчик должен зарегистрировать ошибку где-то, чтобы проверить ее позже. Он может использовать cerr, так как эта ошибка все еще печатается, не будучи выходом на консоль или выходной файл.
Давайте посмотрим примерную программу для этого:
#include <iostream> #include<fstream> using namespace std; int main() { char fileName[] = "data.txt"; // Открытие файла с помощью объекта infile класса ifstream в заголовочном файле fstream ifstream infile(fileName); // Если файл существует, начните чтение с файла if(infile) cout << infile.rdbuf(); /* Если возникает какая-либо проблема, это сообщение отображается как ошибка. Таким образом, пользователь может четко различать между подлинным выводом и ошибками в своем коде. еще */ cerr << "Error while opening the file " << fileName <<endl; return 0; }