我知道我们可以使用
perror()
在 C 中打印错误。我只是想知道是否有 C++ 替代方案,或者我是否必须在我的程序中包含这个(以及因此 stdio.h)。我试图避免尽可能多的 C 函数。
我知道我们可以使用
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 库,这有点冗长,而且有点矫枉过正。
对于 C++11,我们有 <system_error> 标头,因此您应该能够使用:
std::error_code{errno, std::generic_category()}.message();
示例程序:
#include <system_error>
#include <iostream>
int main() {
std::cout << std::error_code{errno, std::generic_category()}.message() << '\n';
}
这打印 Success
。
也可以看看:
generic_category
或system_category
)