Macro de la biblioteca C -ERANGE

C 标准库 - <errno.h>Biblioteca estándar de C - <errno.h>

Descripción

Macro de la biblioteca CERANGERepresenta un error de rango, que ocurre cuando el parámetro de entrada excede el dominio definido por la función matemática; errno se establece en ERANGE.

ERANGEEs una macro de la biblioteca estándar de C, definida en<errno.h>el archivo de cabecera. Se utiliza para indicar un error cuando el resultado excede el rango definido por la función, que generalmente ocurre cuando el resultado de funciones matemáticas o de conversión excede el rango representable.

Declaración

A continuación se muestra la declaración de la macro ERANGE.

#define ERANGE some_value

Parámetros

  • NA

Valor de retorno

  • NA

Ejemplo

A continuación se muestran varios ejemplos de uso deERANGEque demuestran cómo manejar errores de resultado fuera de rango.

Funciones matemáticas

En cálculos matemáticos, como la funciónexpolog, puede ocurrir un errorERANGE. Por ejemplo, al calcular exponentes muy grandes, el resultado puede exceder el rango de representación de los números de punto flotante.

Ejemplo

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

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

    // Limpiar el error anterior
    errno = 0;

    // Llamar a la función exp, puede causar que el resultado exceda el rango
    result = exp(x);

    if (errno == ERANGE) {
        printf("Error: exp() result out of range for input value %f\n", x);
    } else {
        printf("The exp of %f is %f\n", x, result);
    }

    return 0;
}

En este ejemplo, el cálculo deexp(1000.0)puede provocar que el resultado exceda el rango, en cuyo casoerrnose establecerá enERANGE。

Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:

The exp of 1000.000000 is inf

Funciones de conversión

En la conversión numérica, como la funciónstrtolostrtod, si el resultado de la conversión excede el rango del tipo de destino,errnotambién se establecerá enERANGE。

Ejemplo

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

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

    // Limpiar el error anterior
    errno = 0;

    // Llamar a la función strtol, puede causar que el resultado exceda el rango
    result = strtol(str, NULL, 10);

    if (errno == ERANGE) {
        printf("Error: strtol() result out of range for input string %s\n", str);
    } else {
        printf("The converted long value is %ld\n", result);
    }

    return 0;
}

En este ejemplo, cuando la cadena"99999999999999999999999999"se convierte a un valor de tipolong, el resultado excede el rango de representación delong,errnose establecerá enERANGE。

Compilemos y ejecutemos el programa anterior, esto producirá el siguiente resultado:

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

Notas de uso

  1. Verificar el valor de retorno: después de llamar a una función que puede producir un error de rango, se debe verificar el valor de retorno; normalmente estas funciones devuelven un valor especial (comoHUGE_VAL、HUGE_VALF、HUGE_VALLo0)。
  2. Inicializaciónerrno: antes de llamar a la función, se debe establecererrnoen 0, para garantizar que el código de error sea generado por esta llamada y no sea un residuo de llamadas anteriores.
  3. Manejo de errores de rango: cuando se detectaERANGEun error, se debe manejar adecuadamente según el contexto, por ejemplo, imprimir un mensaje de error, usar un valor alternativo o reintentar el cálculo.

Funciones relacionadas y códigos de error

  • Funciones matemáticas: comoexp, log, pow, sin, cos, tan, pueden establecererrnoParaERANGE。
  • cuando el resultado del cálculo excede el rango representable.Funciones de conversiónstrtol, strtoll, strtoul, strtoull, strtof, strtod, strtold: comoerrnoParaERANGE。

, pueden establecer

  • EDOMcuando el resultado de la conversión excede el rango representable.
  • EILSEQOtros códigos de error relacionados

: indica un error de dominio del parámetro de una función matemática, es decir, el parámetro excede el dominio de definición.errno、ERANGE: indica un error de secuencia de bytes ilegal, que generalmente ocurre al procesar caracteres multibyte o caracteres anchos.

C 标准库 - <errno.h>Mediante el uso razonable de

y sus funciones relacionadas, se puede escribir código más robusto y confiable, asegurando que el programa pueda manejar y responder normalmente ante diversas situaciones anormales.