C Language
La gestion des erreurs
Recherche…
Syntaxe
- #include <errno.h>
- int errno; / * implémentation définie * /
- #include <string.h>
- char * strerror (int errnum);
- #include <stdio.h>
- perid vide (const char * s);
Remarques
N'oubliez pas que errno
n'est pas nécessairement une variable, mais que la syntaxe n'est qu'une indication de la manière dont elle pourrait être déclarée. Dans de nombreux systèmes modernes avec des interfaces de threads, errno
est une macro qui se résout en un objet local au thread actuel.
errno
Lorsqu'une fonction de bibliothèque standard échoue, elle définit souvent errno avec le code d'erreur approprié. Le standard C nécessite au moins 3 valeurs pour errno:
Valeur | Sens |
---|---|
EDOM | Erreur de domaine |
ERANGE | Erreur de portée |
EILSEQ | Séquence de caractères multi-octets illégale |
strerror
Si perror
n'est pas assez flexible, vous pouvez obtenir une description d'erreur lisible par l'utilisateur en appelant strerror
partir de <string.h>
.
int main(int argc, char *argv[])
{
FILE *fout;
int last_error = 0;
if ((fout = fopen(argv[1], "w")) == NULL) {
last_error = errno;
/* reset errno and continue */
errno = 0;
}
/* do some processing and try opening the file differently, then */
if (last_error) {
fprintf(stderr, "fopen: Could not open %s for writing: %s",
argv[1], strerror(last_error));
fputs("Cross fingers and continue", stderr);
}
/* do some other processing */
return EXIT_SUCCESS;
}
perror
Pour imprimer un message d'erreur lisible par l'utilisateur sur stderr
, appelez perror
depuis <stdio.h>.
int main(int argc, char *argv[])
{
FILE *fout;
if ((fout = fopen(argv[1], "w")) == NULL) {
perror("fopen: Could not open file for writing");
return EXIT_FAILURE;
}
return EXIT_SUCCESS;
}
Cela affichera un message d'erreur concernant la valeur actuelle de errno
.