Namespaces
Variants

errno

From cppreference.net
定义于头文件 <cerrno>
#define errno /* implementation-defined */

errno 是用于错误指示的预处理器宏。它展开为类型为 int 静态 (C++11 前) 线程局部 (C++11 起) 可修改左值。

多个标准库函数通过向 errno 写入正整数来指示错误。通常, errno 的值会被设置为 <cerrno> 中列出的错误代码之一,这些代码是以字母 E 开头、后跟大写字母或数字的宏常量。

程序启动时 errno 的值为 0 ,尽管库函数被允许在无论是否发生错误时向 errno 写入正整数,但库函数从不会将 0 存入 errno

示例

#include <cerrno>
#include <clocale>
#include <cmath>
#include <cstring>
#include <iostream>
int main()
{
    const double not_a_number = std::log(-1.0);
    std::cout << not_a_number << '\n';
    if (errno == EDOM)
    {
        std::cout << "log(-1) failed: " << std::strerror(errno) << '\n';
        std::setlocale(LC_MESSAGES, "de_DE.utf8");
        std::cout << "Or, in German, " << std::strerror(errno) << '\n';
    }
}

可能的输出:

nan
log(-1) failed: Numerical argument out of domain
Or, in German, Das numerische Argument ist ausserhalb des Definitionsbereiches

缺陷报告

下列行为变更缺陷报告被追溯应用于先前发布的C++标准。

缺陷报告 应用于 发布时的行为 正确行为
LWG 310 C++98 未明确说明 errno 是宏
还是具有外部链接的标识符
errno 必须
是宏

参见

用于标准POSIX兼容错误条件的宏
(宏常量)
stderr 输出当前错误对应的字符串
(函数)
返回给定错误码的文本描述
(函数)
C 文档 for errno