errno
|
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) |
|
|
(C11)
(C11)
|
devuelve una versión textual de un código de error dado
(función) |
|
(C99)
(C99)
(C99)
|
define el mecanismo de manejo de errores utilizado por las funciones matemáticas comunes
(constante macro) |
|
Documentación de C++
para
errno
|
|