errno
|
Определено в заголовочном файле
<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
(функция) |
|
|
возвращает текстовое описание заданного кода ошибки
(функция) |
|
|
Документация C
для
errno
|
|