errno_doserrno_sys_errlist_sys_nerr

在程序执行过程中设置的保存错误代码的全局宏,以及用于显示的错误代码的等效字符串。

语法

#define errno   (*_errno())
#define _doserrno   (*__doserrno())
#define _sys_errlist (__sys_errlist())
#define _sys_nerr (*__sys_nerr())

备注

程序启动期间,errno_doserrno 均由运行时设置为 0。 errno 是在系统级调用中发生错误时设置的。 由于 errno 保留设置它的上一次调用的值,因此该值可能会被后续的调用更改。 发生错误时设置 errno 的运行库调用不会在成功后清除 errno。 始终在调用可能设置 errno 前,通过调用 _set_errno(0) 立即清除它,并在调用后立即进行检查。

发生错误时,errno 不必设置为与系统调用返回的错误代码相同的值。 对于 I/O 操作,_doserrno 将存储与 errno 代码等效的操作系统错误代码。 对于大多数非 I/O 操作,未设置 _doserrno 的值。

每个 errno 值都与可通过使用一个 perror 函数输出的 _sys_errlist 中的错误消息相关联,或者通过使用一个 strerrorstrerror_s 函数存储在字符串中。 perrorstrerror 函数使用 _sys_errlist 数组和 _sys_nerr_sys_errlist 中的元素数量)处理错误信息。 出于代码安全原因,已弃用对 _sys_errlist_sys_nerr 的直接访问。 我们建议你使用更安全的函数版本,而非全局宏,如下所示:

全局宏 功能等效项
_doserrno _get_doserrno_set_doserrno
errno _get_errno_set_errno
_sys_errlist_sys_nerr strerror_s_strerror_s_wcserror_s__wcserror_s

库数学例程通过调用 _matherr 设置 errno。 若要以不同方式处理数学错误,请根据 _matherr 引用说明编写你自己的例程,并将其命名为 _matherr

所有 errno 值都是z <errno.h> 中的预定义常量,并且与 UNIX 兼容。 ISO C99 标准中仅指定了 ERANGEEILSEQEDOM。 有关完整列表,请参阅 errno 常数

要求

全局宏 必需的标头 可选标头
errno <errno.h><stdlib.h><cerrno><cstdlib> (C++)
_doserrno, _sys_errlist, _sys_nerr <stdlib.h><cstdlib> (C++) <errno.h><cerrno> (C++)

_doserrno_sys_errlist_sys_nerr 宏是 Microsoft 扩展。 有关兼容性的详细信息,请参阅 兼容性

另请参阅

全局变量
errno 常数
perror_wperror
strerror_strerror_wcserror__wcserror
strerror_s_strerror_s_wcserror_s__wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno