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); } }