errno
| Definiert in der Header-Datei <cerrno> |
||
| #define errno /* implementierungsabhängig */ |
||
errno ist ein Präprozessor-Makro, das zur Fehleranzeige verwendet wird. Es expandiert zu einem statischen(bis C++11)threadsicheren(seit C++11) modifizierbaren lvalue vom Typ int.
Mehrere Standardbibliotheksfunktionen zeigen Fehler an, indem sie positive ganze Zahlen in errno schreiben. Typischerweise wird der Wert von errno auf einen der Fehlercodes gesetzt, die in <cerrno> als Makrokonstanten aufgeführt sind, die mit dem Buchstaben E beginnen, gefolgt von Großbuchstaben oder Ziffern.
Der Wert von errno ist beim Programmstart 0, und obwohl Bibliotheksfunktionen positive ganze Zahlen in errno schreiben dürfen, unabhängig davon, ob ein Fehler aufgetreten ist oder nicht, speichern Bibliotheksfunktionen niemals 0 in errno.
[bearbeiten] 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
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 310 | C++98 | war unklar, ob errno ein Makro ist oder ein Bezeichner mit externer Bindung |
errno muss ein Makro sein |
[bearbeiten] Siehe auch
| Makros für Standard-POSIX-kompatible Fehlerbedingungen (Makrokonstante) | |
| zeigt eine Zeichenkette des aktuellen Fehlers nach stderr an (function) | |
| gibt eine Textversion eines gegebenen Fehlercodes zurück (Funktion) | |
| C-Dokumentation für errno
| |