2015-06-19 73 views
0

fprintf中。如果我有所谓的错误消息:C++等效采用错误

if (result == 0) 
{ 
    fprintf(stderr, "Error type %d:\n", error_type); 
    exit(1); 
} 

是否有C++版本呢?在我看来,fprintfC而不是C++。我看到cerrstderr有什么关系,但没有例子可以取代上述。或者,也许我完全错了,fprintf是标准C++

+0

请不要使用exit(强制终止程序) –

+0

@DieterLücking:为什么不呢?据我所知,显示的代码是C代码。 – Olaf

回答

3

所有的[有一些例外,其中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; 
} 
4

您可能在第一次Hello World中听说过std::cout!程序,但C++也有一个std::cerr函数对象。

std::cerr << "Error type " << error_type << ":" << std::endl; 
+0

像他这样打印到标准错误也是可以接受的。 –

+0

可接受,但几乎没有类型的安全。在我看来,如果你的日志记录存在性能问题,这是正确的。 当然,还有其他一些现代C++库可以执行和printf一样的功能,同时比标准iostreams更安全,更易于使用。 – KABoissonneault

2

在C++中的等价是使用std::cerr

#include <iostream> 
std::cerr << "Error type " << error_type << ":\n"; 

正如你可以看到采用了典型的operator<<语法,您所熟悉的其他流。

0

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::cerrstd::ostream实现和实例。