errno
Определено в заголовке <errno.h> | ||
|---|---|---|
#define errno /*implementation-defined*/ |
errno — это макрос препроцессора (но см. примечание ниже), который раскрывается в локальную для потока(с C11) изменяемую lvalue типа int. Несколько стандартных функций библиотеки указывают на ошибки, записывая положительные целые числа в errno. Как правило, значение errno устанавливается в одно из кодов ошибок, перечисленных в <errno.h> в виде макроконстант, начинающихся с буквы E и следующих за ней заглавных букв или цифр.
Значение errno равно 0 при запуске программы, и хотя функциям библиотеки разрешено записывать положительные целые числа в errno независимо от того, произошла ли ошибка, функции библиотеки никогда не сохраняют 0 в errno.
Функции библиотеки perror и strerror могут использоваться для получения текстовых описаний условий ошибок, соответствующих текущему значению errno.
Примечание: До C11 стандарты C имели противоречивые требования, согласно которым errno является макросом, но также «не определено, является ли errno макросом или идентификатором, объявленным с внешним связыванием». C11 исправляет это, требуя, чтобы он был определён как макрос (см. также WG14 N1338).
Пример
#include <stdio.h>
#include <math.h>
#include <errno.h>
void show_errno(void)
{
const char *err_info = "unknown error";
switch (errno) {
case EDOM:
err_info = "domain error";
break;
case EILSEQ:
err_info = "illegal sequence";
break;
case ERANGE:
err_info = "pole or range error";
break;
case 0:
err_info = "no error";
}
fputs(err_info, stdout);
puts(" occurred");
}
int main(void)
{
fputs("MATH_ERRNO is ", stdout);
puts(math_errhandling & MATH_ERRNO ? "set" : "not set");
errno = 0;
1.0/0.0;
show_errno();
errno = 0;
acos(+1.1);
show_errno();
errno = 0;
log(0.0);
show_errno();
errno = 0;
sin(0.0);
show_errno();
}Возможный вывод:
MATH_ERRNO is set no error occurred domain error occurred pole or range error occurred no error occurred
Ссылки
- Стандарт C11 (ISO/IEC 9899:2011):
- 7.5 Ошибки <errno.h> (с. 205)
- K.3.1.3 Использование errno (с. 584)
- K.3.2 Ошибки <errno.h> (с. 585)
- Стандарт C99 (ISO/IEC 9899:1999):
- 7.5 Ошибки <errno.h> (с. 186)
- Стандарт C89/C90 (ISO/IEC 9899:1990):
- 4.1.3 Ошибки <errno.h>
См. также
| макросы для стандартных условий ошибок совместимых с POSIX (макроконстанта) |
|
отображает строку символов, соответствующую текущему состоянию ошибки stderr (функция) |
|
|
(C11)(C11) | возвращает текстовое представление заданного кода ошибки (функция) |
|
(C99)(C99)(C99) | определяет механизм обработки ошибок, используемый общими математическими функциями (макроконстанта) |
Документация C++ для errno |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/c/error/errno