C ++ альтернатива perror () - PullRequest
16 голосов
/ 23 июля 2010

Я знаю, что мы можем использовать

perror()

в C для печати ошибок. Мне было просто интересно, есть ли альтернатива C ++ этому, или я должен включить это (и, следовательно, stdio.h) в мою программу. Я стараюсь избегать как можно большего числа функций Си.

Спасибо!

Ответы [ 2 ]

20 голосов
/ 23 июля 2010

Вы можете сделать что-то вроде:

std::cerr << strerror(errno) << std::endl;

Это по-прежнему вызывает strerror, так что вы на самом деле просто заменяете одну функцию Си другой. OTOH, он позволяет писать через потоки, вместо того, чтобы смешивать вывод C и C ++, что, как правило, хорошо. По крайней мере, AFAIK, C ++ ничего не добавляет в библиотеку, чтобы заменить strerror (кроме генерации std::string, я не уверен, что она все равно изменится с strerror).

2 голосов
/ 23 июля 2010

Вы можете использовать класс 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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...