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 <stdio.h>
#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 <stdio.h>
#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

  1. 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)。
  2. Initialisierenerrno: 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.
  3. Behandlung von Bereichsfehlern: bei ErkennungERANGEWenn 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 Beispielexp, log, pow, sin, cos, tan, sie können gesetzt werden, wenn das Berechnungsergebnis den darstellbaren Bereich überschreitet.errnoistERANGE。
  • Konvertierungsfunktionen: wie zum Beispielstrtol, 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.

C-Standardbibliothek - <errno.h>

Weitere Erweiterungen