errno
|
Definiert im Header
<errno.h>
|
||
|
#define errno /* implementation-defined */
|
||
errno
ist ein Präprozessor-Makro (siehe jedoch Hinweis unten), das zu einem
thread-lokalen
(seit C11)
modifizierbaren L-Wert vom Typ
int
expandiert. Mehrere Standardbibliotheksfunktionen zeigen Fehler an, indem sie positive Ganzzahlen in
errno
schreiben. Typischerweise wird der Wert von
errno
auf einen der Fehlercodes gesetzt, die in
<errno.h>
als Makrokonstanten aufgeführt sind, die mit dem Buchstaben
E
beginnen, gefolgt von Großbuchstaben oder Ziffern.
Der Wert von
errno
ist
0
beim Programmstart, und obwohl Bibliotheksfunktionen positive Ganzzahlen in
errno
schreiben dürfen, unabhängig davon, ob ein Fehler aufgetreten ist, speichern Bibliotheksfunktionen niemals
0
in
errno
.
Bibliotheksfunktionen
perror
und
strerror
können verwendet werden, um textuelle Beschreibungen der Fehlerzustände zu erhalten, die dem aktuellen
errno
-Wert entsprechen.
Hinweis: Bis C11 hatten die C-Standards widersprüchliche Anforderungen, da sie sagten, dass
errno
ein Makro ist, aber
auch
dass "es nicht spezifiziert ist, ob
errno
ein Makro oder ein Bezeichner mit externer Bindung ist". C11 behebt dies, indem es vorschreibt, dass es als Makro definiert werden muss (siehe auch WG14
N1338
).
Beispiel
#include <errno.h> #include <math.h> #include <stdio.h> void show_errno(void) { const char *err_info = "unknown error"; switch (errno) { case EDOM: err_info = "domain error"; break; case EILSEQ: err_info = "illegal sequence"; break; case ERANGE: err_info = "pole or range error"; break; case 0: err_info = "no error"; } fputs(err_info, stdout); puts(" occurred"); } int main(void) { fputs("MATH_ERRNO is ", stdout); puts(math_errhandling & MATH_ERRNO ? "set" : "not set"); errno = 0; (void)(1.0 / 0.0); show_errno(); errno = 0; (void)acos(+1.1); show_errno(); errno = 0; (void)log(0.0); show_errno(); errno = 0; (void)sin(0.0); show_errno(); }
Mögliche Ausgabe:
MATH_ERRNO is set no error occurred domain error occurred pole or range error occurred no error occurred
Referenzen
- C23-Standard (ISO/IEC 9899:2024):
-
- 7.5 Fehler <errno.h> (S: TBD)
-
- K.3.1.3 Verwendung von errno (S: TBD)
-
- K.3.2 Fehler <errno.h> (S: TBD)
- C17-Standard (ISO/IEC 9899:2018):
-
- 7.5 Errors <errno.h> (S: TBD)
-
- K.3.1.3 Verwendung von errno (S: TBD)
-
- K.3.2 Errors <errno.h> (S: TBD)
- C11-Standard (ISO/IEC 9899:2011):
-
- 7.5 Errors <errno.h> (S. 205)
-
- K.3.1.3 Verwendung von errno (S. 584)
-
- K.3.2 Errors <errno.h> (S. 585)
- C99-Standard (ISO/IEC 9899:1999):
-
- 7.5 Errors <errno.h> (S: 186)
- C89/C90-Standard (ISO/IEC 9899:1990):
-
- 4.1.3 Fehler <errno.h>
Siehe auch
|
Makros für standardkonforme POSIX-Fehlercodes
(Makrokonstante) |
|
|
gibt eine Zeichenkette entsprechend des aktuellen Fehlers an
stderr
aus
(Funktion) |
|
|
(C11)
(C11)
|
gibt eine Textbeschreibung zu einem gegebenen Fehlercode zurück
(Funktion) |
|
(C99)
(C99)
(C99)
|
definiert den Fehlerbehandlungsmechanismus für gemeinsame mathematische Funktionen
(Makrokonstante) |
|
C++-Dokumentation
für
errno
|
|