errno
|
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) |
|
|
C-Dokumentation
für
errno
|
|