Spec-Zone.ru › C

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>

См. также

E2BIG, EACCES, ..., EXDEV
макросы для стандартных условий ошибок совместимых с POSIX
(макроконстанта)
perror
отображает строку символов, соответствующую текущему состоянию ошибки stderr
(функция)
strerrorstrerror_sstrerrorlen_s
(C11)(C11)
возвращает текстовое представление заданного кода ошибки
(функция)
math_errhandlingMATH_ERRNOMATH_ERREXCEPT
(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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API