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
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по