Namespaces
Variants

errno

From cppreference.net
Definiert im Header <cerrno>
#define errno /* implementation-defined */

errno ist ein Präprozessor-Makro zur Fehleranzeige. Es expandiert zu einem statischen (bis C++11) thread-lokalen (seit C++11) modifizierbaren L-Wert vom Typ int .

Mehrere Standardbibliotheksfunktionen signalisieren Fehler, indem sie positive Ganzzahlen in errno schreiben. Typischerweise wird der Wert von errno auf einen der Fehlercodes gesetzt, die in <cerrno> als Makrokonstanten aufgelistet sind und mit dem Buchstaben E beginnen, gefolgt von Großbuchstaben oder Ziffern.

Der Wert von errno ist 0 beim Programmstart, und obwohl Bibliotheksfunktionen positive ganze Zahlen in errno schreiben dürfen, unabhängig davon ob ein Fehler aufgetreten ist, speichern Bibliotheksfunktionen niemals 0 in errno .

Beispiel

#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';
    }
}

Mögliche Ausgabe:

nan
log(-1) failed: Numerical argument out of domain
Or, in German, Das numerische Argument ist ausserhalb des Definitionsbereiches

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 310 C++98 es war unklar, ob errno ein Makro
oder ein Bezeichner mit externer Bindung ist
errno muss
ein Makro sein

Siehe auch

Makros für standardkonforme POSIX-Fehlerzustände
(Makrokonstante)
gibt eine dem aktuellen Fehler entsprechende Zeichenkette an stderr aus
(Funktion)
gibt eine Textbeschreibung zu einem gegebenen Fehlercode zurück
(Funktion)