Sous-sections

9.7 Aide à la mise au point de programme

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++ = '$';
   }
}

9.7.1 Récupération des erreurs

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


Pr. Marc BUFFAT
buffat@ufrmeca.univ-lyon1.fr
2004-12-01