fprintf中。如果我有所谓的错误消息:C++等效采用错误
if (result == 0)
{
fprintf(stderr, "Error type %d:\n", error_type);
exit(1);
}
是否有C++
版本呢?在我看来,fprintf
是C
而不是C++
。我看到cerr
和stderr
有什么关系,但没有例子可以取代上述。或者,也许我完全错了,fprintf
是标准C++
?
fprintf中。如果我有所谓的错误消息:C++等效采用错误
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++库可以执行和printf一样的功能,同时比标准iostreams更安全,更易于使用。 – KABoissonneault
在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
实现和实例。
请不要使用exit(强制终止程序) –
@DieterLücking:为什么不呢?据我所知,显示的代码是C代码。 – Olaf