Я знаю, что мы можем использовать
perror()
в C для печати ошибок. Я просто задавался вопросом, существует ли альтернатива C++ этому, или должен ли я включать это (и поэтому stdio.h) в моей программе. Я стараюсь избегать как можно большего количества функций C.
Спасибо!
Вы можете сделать что-то вроде:
std::cerr << strerror(errno) << std::endl;
Это все равно вызовет strerror
, так что на самом деле вы просто заменяете одну функцию C на другую. OTOH, он позволяет писать через потоки вместо смешивания вывода C и C ++, что, как правило, хорошо. По крайней мере, AFAIK, C ++ не добавляет ничего в библиотеку, чтобы действовать в качестве замены для strerror
(кроме генерации std :: string
, я не уверен, что бы это было в любом случае замените strerror
).
Вы можете использовать класс boost :: system_error :: error_code
.
#include <boost/system/system_error.hpp>
#include <cerrno>
#include <iostream>
void
PrintError(
const std::string& message,
int error
)
{
std::cerr << message << ": " <<
boost::system::error_code(
error,
boost::system::get_system_category()
).message()
<< std::endl;
}
int
main()
{
PrintError( "something went wrong!", EINVAL );
return 0;
}
это немного многословно и несколько излишне, если вы еще не используете библиотеку boost_system.