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 <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 <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
- 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 que
HUGE_VAL、HUGE_VALF、HUGE_VALLou0)。 - Initialiser
errno: 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. - Gestion des erreurs de plage: lorsqu'elles sont détectées
ERANGELorsqu'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 que
exp,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 que
strtol,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.