Spec-Zone.ru › C++

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

См. также

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/cpp/error/errno

Spec-Zone.ru

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