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
что и код ошибки, возвращаемый системным вызовом. Для операций ввода-вывода _doserrno
хранит коды ошибок операционной системы, эквивалентные кодам errno
. Для большинства операций, отличных от ввода-вывода, значение _doserrno
не задано.
Каждое errno
значение связано с сообщением об ошибке, _sys_errlist
которое может быть напечатано с помощью одной из perror
функций или хранимых в строке с помощью одной из strerror
функций или strerror_s
функций. perror
и strerror
используют массив _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 |
Математические подпрограммы библиотеки, заданные errno
путем вызова _matherr
. Для обработки математических ошибок иным образом напишите собственную процедуру в соответствии с базовым описанием _matherr
и назовите ее _matherr
.
Все errno
значения являются предопределенными константами и <errno.h>
совместимы с UNIX. Только ERANGE
, EILSEQ
и EDOM
определены в стандарте ISO C99. Полный список см errno
. в константы.
Требования
Глобальный макрос | Обязательный заголовок | Необязательный заголовок |
---|---|---|
errno |
<errno.h> <cerrno> или <stdlib.h> <cstdlib> (C++) |
|
_doserrno , , _sys_errlist _sys_nerr |
<stdlib.h> , <cstdlib> (C++) |
<errno.h> , <cerrno> (C++) |
Макросы _doserrno
, _sys_errlist
и _sys_nerr
являются расширениями Майкрософт. Дополнительные сведения о совместимости см. в разделе Совместимость.
См. также
Глобальные переменные
errno
Константы
perror
, _wperror
strerror
, , _strerror
_wcserror
__wcserror
strerror_s
, , _strerror_s
_wcserror_s
__wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno