Пространства имён
Варианты
Действия

errno

Материал из cppreference.com
< cpp‎ | error
 
 
Библиотека диагностики
Обработка исключений
Сбои обработки исключений
(до C++17*)
(до C++17*)
(C++11)(до C++17*)    
(до C++17*)
Коды ошибок
Коды ошибок
errno
Категории исключений
(ТС TM)
Поддержка системных ошибок
(C++11)
(C++11)
Утверждения
Трассировка стека
 
Определено в заголовочном файле <cerrno>
#define errno /* определено-реализацией */

errno это макрос препроцессора, используемый для индикации ошибок. Он расширяется до static (до C++11)локального к потоку (начиная с C++11) изменяемого левостороннего значения типа int.

Некоторые стандартные библиотечные функции указывают на ошибки, записывая положительные целые числа в errno. Как правило, значение errno устанавливается равным одному из кодов ошибок, перечисленных в <cerrno> как макроконстанты, которые начинаются с буквы E, за которой следуют буквы в верхнем регистре или цифры.

При запуске программы значение errno равно 0, и хотя библиотечные функции могут записывать положительные целые числа в errno вне зависимости от того, произошла ошибка или нет, библиотечные функции никогда не сохраняют 0 в errno.

[править] Пример

#include <cerrno>
#include <clocale>
#include <cmath>
#include <cstring>
#include <iostream>
 
int main()
{
    const double not_a_number = std::log(-1.0);
    std::cout << not_a_number << '\n';
 
    if (errno == EDOM)
    {
        std::cout << "Сбой log(-1): " << std::strerror(errno) << '\n';
        std::setlocale(LC_MESSAGES, "de_DE.utf8");
        std::cout << "Или, на Немецком, " << std::strerror(errno) << '\n';
    }
}

Возможный вывод:

nan
Сбой log(-1): Numerical argument out of domain
Или, на Немецком, Das numerische Argument ist ausserhalb des Definitionsbereiches

[править] Отчёты о дефектах

Следующие изменения поведения были применены с обратной силой к ранее опубликованным стандартам C++:

Номер Применён Поведение в стандарте Корректное поведение
LWG 310 C++98 было неясно, является ли errno макросом или идентификатором
с внешним связыванием
errno должен быть макросом

[править] Смотрите также

макросы для стандартных состояний ошибок, совместимых с POSIX
(макроконстанта) [править]
выводит строку символов, соответствующую текущей ошибке, в stderr
(функция) [править]
возвращает текстовую версию данного кода ошибки
(функция) [править]