errno
|
Défini dans l'en-tête
<errno.h>
|
||
|
#define errno /* implementation-defined */
|
||
errno
est une macro de préprocesseur (mais voir la note ci-dessous) qui se développe en une
lvalue modifiable
(depuis C11)
locale au thread de type
int
. Plusieurs fonctions de la bibliothèque standard indiquent des erreurs en écrivant des entiers positifs dans
errno
. Typiquement, la valeur de
errno
est définie à l'un des codes d'erreur listés dans
<errno.h>
sous forme de constantes macro commençant par la lettre
E
suivie de lettres majuscules ou de chiffres.
La valeur de
errno
est
0
au démarrage du programme, et bien que les fonctions de bibliothèque soient autorisées à écrire des entiers positifs dans
errno
qu'une erreur se soit produite ou non, les fonctions de bibliothèque ne stockent jamais
0
dans
errno
.
Fonctions de bibliothèque
perror
et
strerror
peuvent être utilisées pour obtenir des descriptions textuelles des conditions d'erreur correspondant à la valeur actuelle de
errno
.
Remarque : Jusqu'à C11, les normes C avaient des exigences contradictoires, car elles stipulaient que
errno
est une macro mais
également
que "il n'est pas spécifié si
errno
est une macro ou un identifiant déclaré avec liaison externe". C11 corrige cela en exigeant qu'il soit défini comme une macro (voir aussi WG14
N1338
).
Exemple
#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(); }
Sortie possible :
MATH_ERRNO is set no error occurred domain error occurred pole or range error occurred no error occurred
Références
- Norme C23 (ISO/CEI 9899:2024) :
-
- 7.5 Errors <errno.h> (p: TBD)
-
- K.3.1.3 Use of errno (p: TBD)
-
- K.3.2 Errors <errno.h> (p: TBD)
- Norme C17 (ISO/CEI 9899:2018) :
-
- 7.5 Erreurs <errno.h> (p: TBD)
-
- K.3.1.3 Utilisation de errno (p: TBD)
-
- K.3.2 Erreurs <errno.h> (p: TBD)
- Norme C11 (ISO/IEC 9899:2011) :
-
- 7.5 Errors <errno.h> (p: 205)
-
- K.3.1.3 Utilisation de errno (p: 584)
-
- K.3.2 Errors <errno.h> (p: 585)
- Norme C99 (ISO/IEC 9899:1999) :
-
- 7.5 Errors <errno.h> (p: 186)
- Norme C89/C90 (ISO/CEI 9899:1990) :
-
- 4.1.3 Erreurs <errno.h>
Voir aussi
|
macros pour les conditions d'erreur standard compatibles POSIX
(constante macro) |
|
|
affiche une chaîne de caractères correspondant à l'erreur courante vers
stderr
(fonction) |
|
|
(C11)
(C11)
|
retourne une version textuelle d'un code d'erreur donné
(fonction) |
|
(C99)
(C99)
(C99)
|
définit le mécanisme de gestion d'erreur utilisé par les fonctions mathématiques communes
(constante macro) |
|
Documentation C++
pour
errno
|
|