errno, _doserrno, _sys_errlist und _sys_nerr

Globale Makros, die während der Programmausführung festgelegte Fehlercodes und mit den Fehlercodes identische Zeichenfolgen zur Anzeige enthalten.

Syntax

#define errno   (*_errno())
#define _doserrno   (*__doserrno())
#define _sys_errlist (__sys_errlist())
#define _sys_nerr (*__sys_nerr())

Hinweise

Sowohl errno als auch _doserrno werden von der Laufzeit während des Programmstarts auf 0 festgelegt. errno wird bei einem Fehler bei einem Aufruf auf Systemebene festgelegt. Weil errno den Wert für den letzten Aufruf enthält, der ihn festlegte, wird dieser Wert möglicherweise durch darauffolgende Aufrufe geändert. Laufzeitbibliothekaufrufe, die für einen Fehler festgelegt wurden errno , werden bei Erfolg nicht gelöscht errno . Löschen Sie errno immer sofort vor einem Aufruf, der es möglicherweise festlegt, durch Aufrufen von _set_errno(0), und überprüfen Sie es sofort nach dem Aufruf.

Bei einem Fehler errno wird nicht unbedingt derselbe Wert wie der von einem Systemaufruf zurückgegebene Fehlercode festgelegt. Bei E/A-Vorgängen speichert _doserrno die Betriebssystem-Fehlercodeäquivalente von errno-Codes. Bei den meisten Nicht-E/A-Vorgängen wird der Wert nicht _doserrno festgelegt.

Jeder errno Wert ist einer Fehlermeldung zugeordnet, in _sys_errlist der mithilfe einer der perror Funktionen gedruckt oder in einer Zeichenfolge mithilfe einer der strerror Funktionen strerror_s oder Funktionen gespeichert werden kann. perror und strerror verwenden das Array _sys_errlist und _sys_nerr – die Anzahl von Elementen in _sys_errlist –, um Fehlerinformationen zu verarbeiten. Der direkte Zugriff auf _sys_errlist und _sys_nerr ist aus Codesicherheitsgründen veraltet. Es wird empfohlen, wie hier gezeigt anstatt der globalen Makros die sichereren, funktionsbereiten Versionen zu verwenden:

Globales Makro Funktionale Entsprechungen
_doserrno _get_doserrno, _set_doserrno
errno _get_errno, _set_errno
_sys_errlist, _sys_nerr strerror_s, _strerror_s, _wcserror_s, __wcserror_s

Mathematische Bibliotheksroutinen, die durch Aufrufen _matherrfestgelegt werdenerrno. Um Mathematikfehler anders zu handhaben, schreiben Sie Ihre eigene Routine gemäß der _matherr-Verweisbeschreibung und nennen sie _matherr.

Alle errno Werte sind vordefinierte Konstanten in <errno.h>, und sind UNIX-kompatibel. Nur ERANGE, EILSEQ und EDOM werden im Standard ISO C99 festgelegt. Eine vollständige Liste finden Sie unter errno Konstanten.

Anforderungen

Globales Makro Erforderlicher Header Optionaler Header
errno <errno.h><cerrno><cstdlib> oder <stdlib.h>(C++)
_doserrno, _sys_errlist, _sys_nerr <stdlib.h>, <cstdlib> (C++) <errno.h>, <cerrno> (C++)

Die Makros _doserrno, _sys_errlist und _sys_nerr sind Microsoft-Erweiterungen. Weitere Informationen zur Kompatibilität finden Sie unter Kompatibilität.

Siehe auch

Globale Variablen
errno Konstanten
perror, _wperror
strerror, _strerror, _wcserror, __wcserror
strerror_s, _strerror_s, _wcserror_s, __wcserror_s
_get_doserrno
_set_doserrno
_get_errno
_set_errno