# 错误号

< cpp‎ | error

每个定义于 `<cerrno>` 的宏展开成 int 类型的整数常量表达式，每个都拥有正值，匹配 POSIX 错误码中的大多数。下列常量得到定义（实现可以定义更多，只要它们以 'E' 开始，后随数字或大写字母）

定义于头文件 `<cerrno>`
E2BIG (C++11) | 参数列表过长 (宏常量)
EACCES (C++11) | 权限被禁止 (宏常量)
EADDRINUSE (C++11) | 地址在使用中 (宏常量)
EADDRNOTAVAIL (C++11) | 地址不可用 (宏常量)
EAFNOSUPPORT (C++11) | 不支持地址系列 (宏常量)
EAGAIN (C++11) | 资源不可用，须重试 (宏常量)
EALREADY (C++11) | 连接已在进行 (宏常量)
EBADF (C++11) | 坏的的文件描述符 (宏常量)
EBADMSG (C++11) | 坏的消息 (宏常量)
EBUSY (C++11) | 设备或资源忙 (宏常量)
ECANCELED (C++11) | 操作取消 (宏常量)
ECHILD (C++11) | 无子进程 (宏常量)
ECONNABORTED (C++11) | 连接被打断 (宏常量)
ECONNREFUSED (C++11) | 连接被拒绝 (宏常量)
ECONNRESET (C++11) | 连接被重置 (宏常量)
EDEADLK (C++11) | 资源死锁会发生 (宏常量)
EDESTADDRREQ (C++11) | 要求目标地址 (宏常量)
EDOM | 数学参数在函数定义域外 (宏常量)
EEXIST (C++11) | 文件已存在 (宏常量)
EFAULT (C++11) | 坏的地址 (宏常量)
EFBIG (C++11) | 文件过大 (宏常量)
EHOSTUNREACH (C++11) | 主机不可抵达 (宏常量)
EIDRM (C++11) | 标识符被移除 (宏常量)
EILSEQ (C++11) | 非法字节序列 (宏常量)
EINPROGRESS (C++11) | 操作已在进行 (宏常量)
EINTR (C++11) | 函数被中断 (宏常量)
EINVAL (C++11) | 非法参数 (宏常量)
EIO (C++11) | I/O 错误 (宏常量)
EISCONN (C++11) | 接头已连接 (宏常量)
EISDIR (C++11) | 是目录 (宏常量)
ELOOP (C++11) | 符号链接级别过多 (宏常量)
EMFILE (C++11) | 文件描述符值过大 (宏常量)
EMLINK (C++11) | 链接过多 (宏常量)
EMSGSIZE (C++11) | 消息过大 (宏常量)
ENAMETOOLONG (C++11) | 文件名过长 (宏常量)
ENETDOWN (C++11) | 网络不工作 (宏常量)
ENETRESET (C++11) | 连接被网络打断 (宏常量)
ENETUNREACH (C++11) | 网络不可抵达 (宏常量)
ENFILE (C++11) | 系统中打开文件过多 (宏常量)
ENOBUFS (C++11) | 无缓冲空间可用 (宏常量)
ENODATA (C++11) | 流头已读取队列中无消息 (宏常量)
ENODEV (C++11) | 无此设备 (宏常量)
ENOENT (C++11) | 无此文件或目录 (宏常量)
ENOEXEC (C++11) | 可执行文件格式错误 (宏常量)
ENOLCK (C++11) | 无可用锁 (宏常量)
ENOLINK (C++11) | 链接已切断 (宏常量)
ENOMEM (C++11) | 空间不足 (宏常量)
ENOMSG (C++11) | 无所需类型消息 (宏常量)
ENOPROTOOPT (C++11) | 协议不可用 (宏常量)
ENOSPC (C++11) | 设备无剩余空间 (宏常量)
ENOSR (C++11) | 无流资源 (宏常量)
ENOSTR (C++11) | 非流 (宏常量)
ENOSYS (C++11) | 不支持的函数 (宏常量)
ENOTCONN (C++11) | 未连接的接头 (宏常量)
ENOTDIR (C++11) | 非目录 (宏常量)
ENOTEMPTY (C++11) | 目录非空 (宏常量)
ENOTRECOVERABLE (C++11) | 状态不可恢复 (宏常量)
ENOTSOCK (C++11) | 非接头 (宏常量)
ENOTSUP (C++11) | 不支持 (宏常量)
ENOTTY (C++11) | 不适合的 I/O 控制操作 (宏常量)
ENXIO (C++11) | 无此设备或地址 (宏常量)
EOPNOTSUPP (C++11) | 接头上不支持的操作 (宏常量)
EOVERFLOW (C++11) | 值过大而无法存入数据类型 (宏常量)
EOWNERDEAD (C++11) | 先前拥有者已死 (宏常量)
EPERM (C++11) | 操作不允许 (宏常量)
EPIPE (C++11) | 管道损坏 (宏常量)
EPROTO (C++11) | 协议错误 (宏常量)
EPROTONOSUPPORT (C++11) | 不支持的协议 (宏常量)
EPROTOTYPE (C++11) | 接头类型错误的协议 (宏常量)
ERANGE | 结果过大 (宏常量)
EROFS (C++11) | 只读文件系统 (宏常量)
ESPIPE (C++11) | 非法寻位 (宏常量)
ESRCH (C++11) | 无此进程 (宏常量)
ETIME (C++11) | 流 ioctl() 超时 (宏常量)
ETIMEDOUT (C++11) | 连接超时 (宏常量)
ETXTBSY (C++11) | 文本文件忙 (宏常量)
EWOULDBLOCK (C++11) | 操作会阻塞 (宏常量)
EXDEV (C++11) | 跨设备链接 (宏常量)

要求所有值为唯一，除了 `EOPNOTSUPP` 与 `ENOTSUP` 的值可以相同，及 `EAGAIN` 与 `EWOULDBLOCK` 的值可以相同

### 示例

    #include <iostream>
    #include <cmath>
    #include <cerrno>
    #include <cstring>
    #include <clocale>

    int main()
    {
        double not_a_number = std::log(-1.0);
        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';
        }
    }

可能的输出：

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

### 参阅

errc (C++11) | 列出所有标准 `<cerrno>` 宏常量的 std::error_condition 枚举 (类)
errno | 展开成 POSIX 兼容的线程局域错误号变量的宏 (宏变量)
perror | 显示对应当前错误的字符串于 stderr (函数)
strerror | 返回给定错误码的文本版本 (函数)