Différences entre les versions de « Programmation C/Erreurs »

m
<source> -> <syntaxhighlight> (phab:T237267)
(Suppression des cast en void et renommage de la fonction teste en test.)
m (<source> -> <syntaxhighlight> (phab:T237267))
 
== Utilisation ==
Pour inclure l'en-tête de son fichier source, il faut ajouter la ligne :
<sourcesyntaxhighlight lang="c">
#include <errno.h>
</syntaxhighlight>
</source>
 
On peut alors utiliser la variable <code>errno</code>, de type <code>int</code>, pour traiter les erreurs<ref name="typeErrno"><code>errno</code> peut être définie par une macro ou un identificateur. N'essayez donc pas de récupérer son adresse.</ref>.
Énumérer toutes les valeurs possibles d'<code>errno</code> pour leur associer un message peut être relativement pénible, surtout si on doit le faire dans chaque application. Heureusement qu'une fonction toute prête existe&nbsp;:
 
<sourcesyntaxhighlight lang="c">
#include <string.h>
char * strerror(int code);
</syntaxhighlight>
</source>
 
Cette fonction permet de connaître la signification textuelle d'une valeur de <code>errno</code>. À noter que le code de retour est une chaine statique, dont il est sage de présupposer la durée de vie la plus courte possible. N'essayez pas non plus de modifier le contenu de la chaîne, affichez-la directement ou copiez-la dans une zone temporaire.
Une autre fonction, <code>perror</code>, permet d'envoyer le message correspondant à errno sur le flux des erreurs stderr.
 
<sourcesyntaxhighlight lang="c">
#include <errno.h>
void perror(const char *chaine);
</syntaxhighlight>
</source>
 
Le paramètre ''chaine'', s'il est différent de NULL, est une chaine de caractère passée par le programmeur et affichée avant le message d'erreur.
Pour illustrer cela, voici un exemple, qui tente de convertir une chaine de caractères en un nombre. Le nombre donné, 2<sup>64</sup>, peut ne pas être dans le domaine de valeur du type <code>unsigned long</code> (qui peut se limiter à 2<sup>32</sup> - 1), suivant l'architecture. Dans ce cas, on utilise <code>errno</code> pour afficher un message d'erreur approprié à l'utilisateur.
 
<sourcesyntaxhighlight lang="c">
#include <stdio.h> /* puts(), printf(), NULL */
#include <stdlib.h> /* strtoul() */
return EXIT_SUCCESS;
}
</syntaxhighlight>
</source>
 
Si le type <code>unsigned long</code> est codé sur 32 bits, on peut obtenir:
1 535

modifications