首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >perror()的C++替代方法

perror()的C++替代方法
EN

Stack Overflow用户
提问于 2010-07-24 01:43:37
回答 3查看 11.2K关注 0票数 19

我知道我们可以用

代码语言:javascript
复制
perror()

在C中打印错误。我只是想知道是否有C++替代它,或者我是否必须在我的程序中包含这个(因此stdio.h)。我尽量避免使用更多的C函数。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-24 01:47:57

你可以这样做:

代码语言:javascript
复制
std::cerr << strerror(errno) << std::endl;

这仍然会调用strerror,所以您实际上只是用一个C函数替换了另一个C函数。它确实允许你通过流编写,而不是混合C和C++输出,这通常是一件好事。至少AFAIK,C++没有向库中添加任何东西来替代strerror (除了生成std::string之外,我不确定它会对strerror有什么改变)。

票数 23
EN

Stack Overflow用户

发布于 2010-07-24 02:08:20

您可以使用boost::system_error::error_code类。

代码语言:javascript
复制
#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
EN

Stack Overflow用户

发布于 2021-12-12 08:43:58

对于C++11,我们有标头,因此您应该能够使用:

代码语言:javascript
复制
std::error_code{errno, std::generic_category()}.message();

示例程序:

代码语言:javascript
复制
#include <system_error>
#include <iostream>

int main() {
    std::cout << std::error_code{errno, std::generic_category()}.message() << '\n';
}

这是prints Success

另请参阅:

(关于使用generic_category还是system_category)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3320898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档