errno
Определено в заголовке <cerrno> |
||
|---|---|---|
#define errno /* implementation-defined */ |
errno — это препроцессорная макрокоманда, используемая для указания ошибок. Она раскрывается в статическую(до 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) 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/w/cpp/error/errno