Spec-Zone.ru › C++

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 должен
быть макросом

См. также

E2BIG, EACCES, ..., EXDEV
макросы для стандартных условий ошибок, совместимых с POSIX
(макроконстанта)
perror
отображает строку символов, соответствующую текущей ошибке, в stderr
(функция)
strerror
возвращает текстовое представление заданного кода ошибки
(функция)
Документация C для errno

© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
https://en.cppreference.com/w/cpp/error/errno

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API