Namespaces
Variants

errno

From cppreference.net
Определено в заголовочном файле <cerrno>
#define errno /* implementation-defined */

errno — это макрос препроцессора, используемый для индикации ошибок. Он раскрывается в статическую (до C++11) поточно-локальную (начиная с C++11) изменяемую lvalue типа 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) failed: " << std::strerror(errno) << '\n';
        std::setlocale(LC_MESSAGES, "de_DE.utf8");
        std::cout << "Or, in German, " << std::strerror(errno) << '\n';
    }
}

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

nan
log(-1) failed: Numerical argument out of domain
Or, in German, Das numerische Argument ist ausserhalb des Definitionsbereiches

Отчеты о дефектах

Следующие отчеты об изменениях поведения, влияющие на дефекты, были применены ретроактивно к ранее опубликованным стандартам C++.

DR Applied to Behavior as published Correct behavior
LWG 310 C++98 было неясно, является ли errno макросом
или идентификатором с внешней линковкой
errno должен
быть макросом

Смотрите также

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