Namensräume
Varianten
Aktionen

errno

Von cppreference.com
< c‎ | error
Definiert in Header <errno.h>
#define errno /* implementierungsabhängig */

errno ist ein Präprozessor-Makro (aber siehe Hinweis unten), das sich zu einem thread-lokalen(seit C11) modifizierbaren L-Wert vom Typ int erweitert. 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 oder nicht, speichern Bibliotheksfunktionen niemals 0 in errno.

Die Bibliotheksfunktionen perror und strerror können verwendet werden, um Textbeschreibungen der Fehlerbedingungen zu erhalten, die dem aktuellen errno-Wert entsprechen.

Hinweis: Bis C11 hatten die C-Standards widersprüchliche Anforderungen, da sie besagten, 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 und schreibt vor, dass es als Makro definiert sein muss (siehe auch WG14 N1338).

[bearbeiten] 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

[bearbeiten] 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 Fehler <errno.h> (S. TBD)
  • K.3.1.3 Verwendung von errno (S. TBD)
  • K.3.2 Fehler <errno.h> (S. TBD)
  • C11-Standard (ISO/IEC 9899:2011)
  • 7.5 Fehler <errno.h> (S. 205)
  • K.3.1.3 Verwendung von errno (S. 584)
  • K.3.2 Fehler <errno.h> (S. 585)
  • C99-Standard (ISO/IEC 9899:1999)
  • 7.5 Fehler <errno.h> (S. 186)
  • C89/C90-Standard (ISO/IEC 9899:1990)
  • 4.1.3 Fehler <errno.h>

[bearbeiten] Siehe auch

Makros für Standard-POSIX-kompatible Fehlerbedingungen
(Makrokonstante) [bearbeiten]
zeigt einen Zeichenstring, der dem aktuellen Fehler entspricht, nach stderr an
(Funktion) [bearbeiten]
gibt eine Textversion eines gegebenen Fehlercodes zurück
(Funktion) [bearbeiten]
definiert den von den allgemeinen mathematischen Funktionen verwendeten Fehlerbehandlungsmechanismus
(Makrokonstante) [bearbeiten]