Namespaces
Variants

errno

From cppreference.net
< c ‎ | error
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)
retourne une version textuelle d'un code d'erreur donné
(fonction)
définit le mécanisme de gestion d'erreur utilisé par les fonctions mathématiques communes
(constante macro)