Альтернатива C++ perror ()

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

perror()

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

Спасибо!

16
задан Sagar 23 July 2010 в 17:43
поделиться

2 ответа

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

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

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

20
ответ дан 30 November 2019 в 22:01
поделиться

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

2
ответ дан 30 November 2019 в 22:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: