C++等效于带有错误的 fprintf
C++ equivalent of fprintf with error
如果我有一条错误消息,由以下人员调用:
if (result == 0)
{
fprintf(stderr, "Error type %d:n", error_type);
exit(1);
}
有C++
版本吗?在我看来,fprintf
是C
而不是C++
.我看到了与cerr
和stderr
有关的东西,但没有可以取代上述的例子。或者也许我完全错了,fprintf
是C++
的标准?
所有[除了少数例外,C和C++在标准方面发生冲突]有效的C代码在技术上也是有效的(但不一定是"好的")C++代码。
我个人会把这段代码写成:
if (result == 0)
{
std::cerr << "Error type " << error_type << std:: endl;
exit(1);
}
但是在C++中还有几十种其他方法可以解决这个问题(其中至少有一半也可以在 C 中工作,无论是否经过一些修改)。
一个非常合理的解决方案是throw
异常 - 但这只有在调用代码[在某个级别]catch
该异常时才真正有用。像这样:
if (result == 0)
{
throw MyException(error_type);
}
然后:
try
{
... code goes here ...
}
catch(MyException me)
{
std::cerr << "Error type " << me.error_type << std::endl;
}
你可能在你的第一个Hello World!程序中听说过std::cout
,但C++还有一个std::cerr
函数对象。
std::cerr << "Error type " << error_type << ":" << std::endl;
C++ 等效的就是使用 std::cerr
#include <iostream>
std::cerr << "Error type " << error_type << ":n";
如您所见,它使用您熟悉的其他流的典型operator<<
语法。
C++代码而是使用std::ostream
和文本格式运算符(无论它是否表示文件)
void printErrorAndExit(std::ostream& os, int result, int error_type) {
if (result == 0) {
os << "Error type " << error_type << std::endl;
exit(1);
}
}
要使用专用于文件的std::ostream
,可以使用 std::ofstream
。
stderr
文件描述符映射到std::cerr
std::ostream
实现和实例。
相关文章:
- 我的代码中有错误吗?使用BGI图形的C++代码对我不起作用
- 我的代码中有错误,未声明的标识符
- C++ LeetCode #377 的 DP 解决方案中,此代码是否有错误?
- 试图建立银行管理系统,但有错误
- 我试图创建临时对象的方式有错误吗
- 我的随机生成器是否不工作,或者我决定人/骨架是否击中对手的方式是否有错误
- 我在OpenCV中有错误的"approxPolyDP(ROI_Vertices, ROI_Poly, 1.0, true)"
- 我在这个 C++ 代码上有错误吗?
- 是视觉C++优化器错误还是我的代码中有错误?
- 为什么一个简单的C++程序会有错误的结果?是 #define 引起的吗?
- 对此有错误
- C :数据文件有错误:预期的无限制ID
- 一个带有参数的程序,为什么此程序有错误的答案
- 仅使用boost.datetime在Windows上有错误
- 使用向量循环时,是否有错误
- Microsoft Visual Studio发现我所有的CUDA设备端函数都有错误
- 继承默认构造函数在 gcc 中失败并在 clang 中工作,哪个有错误?
- 为什么有错误未定义_getws_s
- 在快速排序程序中有错误
- 用"fprintf"打印错误后调用"getchar()"有什么意义?