我如何在C ++中使用errno

时间:2011-10-26 09:54:25

标签: c++ error-handling

我无法理解c ++中的errno库是为了什么?它中设置了哪些类型的错误,如何知道哪个数字代表哪个错误?

是否会影响程序执行?

1 个答案:

答案 0 :(得分:11)

errno.h是C ++的C子集的一部分。它由C库使用并包含错误代码。如果对函数的调用失败,则变量“errno”将相应地设置为错误。

如果您使用的是C ++标准库,那将毫无用处。

在C中,您有将errno代码转换为C字符串的函数。如果你的代码是单线程的,你可以使用strerror,否则使用strerror_r(参见http://www.club.cc.cmu.edu/~cmccabe/blog_strerror.html

例如在C中它的工作原理如下:

 int result = call_To_C_Library_Function_That_Fails();

 if( result != 0 )
 {
    char buffer[ 256 ];
    strerror_r( errno, buffer, 256 ); // get string message from errno, XSI-compliant version
    printf("Error %s", buffer);
     // or
    char * errorMsg = strerror_r( errno, buffer, 256 ); // GNU-specific version, Linux default
    printf("Error %s", errorMsg); //return value has to be used since buffer might not be modified
    // ...
 }

当您使用C库或C中的OS库时,当然可能需要使用C ++。例如,如果您在Unix系统中使用sys / socket.h API。

使用C ++,如果您正在编写C API调用的包装器,您可以使用自己的C ++异常,这些异常将使用errno.h从C API调用错误代码中获取相应的消息。