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 | Применяется к | Поведение согласно опубликованной версии | Корректное поведение |
|---|---|---|---|
| LWG 310 | C++98 | было неясно, является ли errno макросомили идентификатором с внешним связыванием |
errno долженбыть макросом |
См. также
| макросы для стандартных условий ошибок, совместимых с POSIX (макроконстанта) |
|
выводит в stderr строку, соответствующую текущей ошибке (функция) |
|
| возвращает текстовое описание заданного кода ошибки (функция) |
|
Документация по C для errno |
|
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/cpp/error/errno