La pseudo-fonction assert, définie dans le fichier en-tête assert.h, émet un message d'erreur lorsque l'expression passée en argument est fausse. Ce message contient le nom du fichier source ainsi que le numéro de la ligne correspondant à l'évaluation de l'expression.
Certains compilateurs provoquent de plus l'arrêt du programme avec création d'un fichier '>' (core). Ce mécanisme peut être désactivé en compilant le programme avec l'option -DNDEBUG.
Exemple
#include <string.h>
#include <assert.h>
#define DIM 50
main()
{
char tab[DIM];
void f(char *p, int n);
memset(tab, ' ', DIM);
f(tab, DIM+1);
}
void f(char *p, int n)
{
char *ptr = p;
int i;
for (i=0; i < n; i++) {
assert(ptr - p < DIM);
*ptr++ = '$';
}
}
En cas d'erreur, certaines fonctions (fopen par exemple) positionnent une variable externe errno déclarée dans le fichier en-tête errno.h. Ce fichier contient également une liste de pseudo-constantes correspondant aux différentes valeurs que peut prendre la variable errno.
La fonction perror, dont la déclaration figure dans le fichier en-tête stdio.h, permet d'émettre le message correspondant à la valeur positionnée dans la variable errno.
De plus, la fonction strerror, déclarée dans le fichier en-tête string.h, retourne un pointeur sur ce message.
Syntaxe
void perror(const char *s)
char *strerror(int erreur)
La fonction perror émet, sur le flot stderr, le message d'erreur précédé de la chaîne passée en argument ainsi que du caractère :.
La fonction strerror retourne un pointeur sur le message d'erreur dont le numéro est passé en argument.
Exemple
#include <stdio.h>
#include <errno.h>
#include <string.h>
main() {
FILE *f;
if ((f=fopen("ExistePas", "r")) == NULL) {
perror("fopen");
puts(strerror(errno));
exit(1);
}
}