Namespaces
Variants

errno

From cppreference.net
< c ‎ | error
Definido en el encabezado <errno.h>
#define errno /* implementation-defined */

errno es una macro del preprocesador (pero véase la nota siguiente) que se expande a un lvalue modificable local al hilo (desde C11) de tipo int . Varias funciones de la biblioteca estándar indican errores escribiendo enteros positivos en errno . Típicamente, el valor de errno se establece en uno de los códigos de error listados en <errno.h> como constantes macro que comienzan con la letra E seguida de letras mayúsculas o dígitos.

El valor de errno es 0 al inicio del programa, y aunque las funciones de biblioteca pueden escribir enteros positivos en errno independientemente de si ocurrió un error, las funciones de biblioteca nunca almacenan 0 en errno .

Funciones de biblioteca perror y strerror pueden utilizarse para obtener descripciones textuales de las condiciones de error que corresponden al valor actual de errno .

Nota: Hasta C11, los estándares de C tenían requisitos contradictorios, ya que decían que errno es una macro pero también que "no está especificado si errno es una macro o un identificador declarado con enlace externo". C11 corrige esto, requiriendo que se defina como una macro (ver también WG14 N1338 ).

Ejemplo

#include <errno.h>
#include <math.h>
#include <stdio.h>
void show_errno(void)
{
    const char *err_info = "unknown error";
    switch (errno)
    {
        case EDOM:
            err_info = "domain error";
            break;
        case EILSEQ:
            err_info = "illegal sequence";
            break;
        case ERANGE:
            err_info = "pole or range error";
            break;
        case 0:
            err_info = "no error";
    }
    fputs(err_info, stdout);
    puts(" occurred");
}
int main(void)
{
    fputs("MATH_ERRNO is ", stdout);
    puts(math_errhandling & MATH_ERRNO ? "set" : "not set");
    errno = 0;
    (void)(1.0 / 0.0);
    show_errno();
    errno = 0;
    (void)acos(+1.1);
    show_errno();
    errno = 0;
    (void)log(0.0);
    show_errno();
    errno = 0;
    (void)sin(0.0);
    show_errno();
}

Salida posible:

MATH_ERRNO is set
no error occurred
domain error occurred
pole or range error occurred
no error occurred

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.5 Errores <errno.h> (p: TBD)
  • K.3.1.3 Uso de errno (p: TBD)
  • K.3.2 Errores <errno.h> (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.5 Errores <errno.h> (p: TBD)
  • K.3.1.3 Uso de errno (p: TBD)
  • K.3.2 Errores <errno.h> (p: TBD)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.5 Errores <errno.h> (p: 205)
  • K.3.1.3 Uso de errno (p: 584)
  • K.3.2 Errores <errno.h> (p: 585)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.5 Errores <errno.h> (p: 186)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.1.3 Errores <errno.h>

Véase también

macros para condiciones de error estándar compatibles con POSIX
(constante macro)
muestra una cadena de caracteres correspondiente al error actual en stderr
(función)
devuelve una versión textual de un código de error dado
(función)
define el mecanismo de manejo de errores utilizado por las funciones matemáticas comunes
(constante macro)