Macro de bibliothèque C -ERANGE

Bibliothèque standard C - <errno.h>

Description

Macro de bibliothèque CERANGEIndique une erreur de plage, qui se produit lorsque l'argument d'entrée dépasse la plage définie par la fonction mathématique, et errno est défini à ERANGE.

ERANGEest une macro de la bibliothèque standard C, définie dans<errno.h>dans le fichier d'en-tête. Elle est utilisée pour indiquer une erreur lorsque le résultat dépasse la plage définie par la fonction, se produisant généralement lorsque le résultat d'une fonction mathématique ou d'une fonction de conversion dépasse la plage représentable.

Déclaration

Voici la déclaration de la macro ERANGE.

#define ERANGE some_value

Paramètre

  • N/D

Valeur de retour

  • N/D

Exemple

Voici plusieurs utilisations deERANGEexemple montrant comment gérer une erreur de résultat hors plage.

Fonctions mathématiques

Dans les calculs mathématiques, comme laexpoulogfonction, une erreur peut se produire.ERANGEerreur. Par exemple, lors du calcul d'un très grand exposant, le résultat peut dépasser la plage représentable des nombres à virgule flottante.

Exemple

#include <stdio.h>
#include <math.h>
#include <errno.h>

int main() {
    double x = 1000.0;
    double result;

    // Effacer l'erreur précédente
    errno = 0;

    // Appeler la fonction exp peut entraîner un résultat hors plage
    result = exp(x);

    if (errno == ERANGE) {
        printf("Erreur : le résultat de exp() est hors plage pour la valeur d'entrée %f\n", x);
    } else {
        printf("L'exp de %f est %f\n", x, result);
    }

    return 0;
}

Dans cet exemple, calculezexp(1000.0)peut entraîner un dépassement de plage du résultat, auquel caserrnosera défini àERANGE。

Compilons et exécutons le programme ci-dessus, ce qui produira le résultat suivant :

The exp of 1000.000000 is inf

Fonctions de conversion

Dans les conversions numériques, telles que lastrtoloustrtodfonction, si le résultat de la conversion dépasse la plage du type cible,errnosera également défini àERANGE。

Exemple

#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
#include <limits.h>

int main() {
    const char *str = "99999999999999999999999999";
    long result;

    // Effacer l'erreur précédente
    errno = 0;

    // Appeler la fonction strtol, peut entraîner un résultat hors plage
    result = strtol(str, NULL, 10);

    if (errno == ERANGE) {
        printf("Erreur : résultat de strtol() hors plage pour la chaîne d'entrée %s\n", str);
    } else {
        printf("La valeur long convertie est %ld\n", result);
    }

    return 0;
}

Dans cet exemple, la chaîne"99999999999999999999999999"Converti enlonglorsque la valeur est de type, le résultat dépasselongla plage représentable deerrnosera défini àERANGE。

Compilons et exécutons le programme ci-dessus, ce qui produira le résultat suivant :

Error: strtol() result out of range for input string 99999999999999999999999999

Précautions d'utilisation

  1. Vérifier la valeur de retour: Après avoir appelé une fonction susceptible de produire une erreur de plage, la valeur de retour doit être vérifiée. Généralement, ces fonctions renvoient une valeur spéciale en cas d'erreur (telle queHUGE_VAL、HUGE_VALF、HUGE_VALLou0)。
  2. Initialisererrno: avant d'appeler la fonction, vous devezerrnomis à 0, pour s'assurer que le code d'erreur a été produit par cet appel, plutôt que d'être un reste d'un appel précédent.
  3. Gestion des erreurs de plage: lorsqu'elles sont détectéesERANGELorsqu'une erreur se produit, elle doit être traitée de manière appropriée selon le contexte, par exemple en affichant un message d'erreur, en utilisant une valeur alternative ou en réessayant le calcul.

Fonctions et codes d'erreur associés

  • Fonctions mathématiques: telles queexp, log, pow, sin, cos, tan, elles peuvent définir un code d'erreur lorsque le résultat du calcul dépasse la plage représentable.errnoestERANGE。
  • Fonctions de conversion: telles questrtol, strtoll, strtoul, strtoull, strtof, strtod, strtold, elles peuvent définir un code d'erreur lorsque le résultat de la conversion dépasse la plage représentable.errnoestERANGE。

Autres codes d'erreur associés

  • EDOM: Indique une erreur de domaine dans une fonction mathématique, c'est-à-dire que l'argument est en dehors du domaine de définition.
  • EILSEQ: Indique une erreur de séquence d'octets illégale, qui se produit généralement lors du traitement de caractères multioctets ou de caractères larges.

Grâce à une utilisation appropriée deerrno、ERANGEet de ses fonctions associées, vous pouvez écrire du code plus robuste et fiable, en garantissant que le programme peut toujours gérer et répondre correctement dans diverses conditions anormales.

Bibliothèque standard C - <errno.h>

autres extensions