C-Bibliotheksmakro -ERANGE
C-Standardbibliothek - <errno.h>
Beschreibung
C-BibliotheksmakroERANGEZeigt einen Bereichsfehler an, der auftritt, wenn das Eingabeargument den von der mathematischen Funktion definierten Bereich überschreitet und errno auf ERANGE gesetzt wird.
ERANGEist ein Makro in der C-Standardbibliothek, definiert in<errno.h>in der Header-Datei. Es wird verwendet, um einen Fehler anzuzeigen, bei dem das Ergebnis den von der Funktion definierten Bereich überschreitet, was normalerweise auftritt, wenn das Ergebnis einer mathematischen Funktion oder Konvertierungsfunktion den darstellbaren Bereich überschreitet.
Deklaration
Nachstehend ist die Deklaration des ERANGE-Makros.
#define ERANGE some_value
Parameter
- N/V
Rückgabewert
- N/V
Beispiel
Im Folgenden finden sich mehrere Verwendungen vonERANGEBeispiel, das zeigt, wie ein Fehler bei einem Ergebnis außerhalb des Bereichs behandelt wird.
Mathematische Funktionen
Bei mathematischen Berechnungen, wie z. B. derexpoderlogFunktion, kann ein Fehler auftreten.ERANGEFehler. Zum Beispiel kann beim Berechnen eines sehr großen Exponenten das Ergebnis den darstellbaren Bereich von Gleitkommazahlen überschreiten.
Beispiel
#include <math.h>
#include <errno.h>
int main() {
double x = 1000.0;
double result;
// Vorherigen Fehler löschen
errno = 0;
// exp-Funktion aufrufen, kann dazu führen, dass result außerhalb des gültigen Bereichs liegt
result = exp(x);
if (errno == ERANGE) {
printf("Fehler: exp()-Ergebnis außerhalb des gültigen Bereichs für Eingabewert %f\n", x);
} else {
printf("Der exp-Wert von %f ist %f\n", x, result);
}
return 0;
}
In diesem Beispiel wird berechnetexp(1000.0)kann dazu führen, dass das Ergebnis außerhalb des gültigen Bereichs liegt, in diesem Fallerrnowird auf ... gesetztERANGE。
Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:
The exp of 1000.000000 is inf
Konvertierungsfunktionen
Bei numerischen Konvertierungen, wie z. B. derstrtoloderstrtodFunktion, wenn das Konvertierungsergebnis den Bereich des Zieltyps überschreitet,errnowird ebenfalls auf ... gesetztERANGE。
Beispiel
#include <stdlib.h>
#include <errno.h>
#include <limits.h>
int main() {
const char *str = "99999999999999999999999999";
long result;
// Vorherigen Fehler löschen
errno = 0;
// Aufruf der strtol-Funktion, kann ein Ergebnis außerhalb des gültigen Bereichs verursachen
result = strtol(str, NULL, 10);
if (errno == ERANGE) {
printf("Fehler: strtol()-Ergebnis außerhalb des gültigen Bereichs für Eingabezeichenfolge %s\n", str);
} else {
printf("Der konvertierte long-Wert ist %ld\n", result);
}
return 0;
}
In diesem Beispiel ist die Zeichenfolge"99999999999999999999999999"Konvertiert zulongwenn der Wert vom Typ ist, überschreitet das Ergebnislongden darstellbaren Bereich vonerrnowird auf ... gesetztERANGE。
Lassen Sie uns das obige Programm kompilieren und ausführen, was das folgende Ergebnis erzeugt:
Error: strtol() result out of range for input string 99999999999999999999999999
Vorsichtsmaßnahmen bei der Verwendung
- Prüfen Sie den Rückgabewert: Nach dem Aufruf einer Funktion, die einen Bereichsfehler verursachen kann, sollte der Rückgabewert geprüft werden. Typischerweise geben diese Funktionen im Fehlerfall einen speziellen Wert zurück (wie z. B.
HUGE_VAL、HUGE_VALF、HUGE_VALLoder0)。 - Initialisieren
errno: Bevor Sie die Funktion aufrufen, sollten Sieerrnoauf 0 gesetzt, um sicherzustellen, dass der Fehlercode durch diesen Aufruf erzeugt wurde und nicht von einem vorherigen Aufruf übrig geblieben ist. - Behandlung von Bereichsfehlern: bei Erkennung
ERANGEWenn ein Fehler auftritt, sollte er je nach Kontext angemessen behandelt werden, zum Beispiel durch Ausgeben einer Fehlermeldung, Verwenden eines alternativen Werts oder Wiederholen der Berechnung.
Zugehörige Funktionen und Fehlercodes
- Mathematische Funktionen: wie zum Beispiel
exp,log,pow,sin,cos,tan, sie können gesetzt werden, wenn das Berechnungsergebnis den darstellbaren Bereich überschreitet.errnoistERANGE。 - Konvertierungsfunktionen: wie zum Beispiel
strtol,strtoll,strtoul,strtoull,strtof,strtod,strtold, sie können gesetzt werden, wenn das Konvertierungsergebnis den darstellbaren Bereich überschreitet.errnoistERANGE。
Weitere zugehörige Fehlercodes
EDOM: Bezeichnet einen Domänenfehler in einer mathematischen Funktion, d. h. das Argument liegt außerhalb des Definitionsbereichs.EILSEQ: Bezeichnet einen Fehler bei ungültiger Bytefolge, der typischerweise bei der Verarbeitung von Multibyte-Zeichen oder Breitzeichen auftritt.
Durch die richtige Verwendung vonerrno、ERANGEund der zugehörigen Funktionen können Sie robusteren und zuverlässigeren Code schreiben, wodurch sichergestellt wird, dass das Programm auch unter verschiedenen abnormalen Bedingungen noch angemessen damit umgehen und reagieren kann.