Cerr – обработка ошибок в C++

cerr-obrabotka-oshibok-cpp

Эта статья пытается пролить некоторый свет на (часто игнорируемый) объект 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;
}


.

  • July 10, 2020