Next Previous Contents

9. La bibliothèque standard C pour Linux

Par James M. Rogers jrogers@u.washington.edu

9.1 Sixième partie : <assert.h> Fonctions de diagnostic pour les programmeurs

Le dernier article concernait <stdlib.h>, les fonctions utilitaires. Celui-ci traîte de <assert.h>, les fonctions de diagnostic pour les programmeurs.

Je suppose que le lecteur connaît la programmation en C. Je n'apporte aucune garantie sur l'exactitude des informations apportées ni sur leur utilité pour quoi que ce soit.

Si vous les utilisez convenablement, les assertions [NdT: c'est-à-dire des points d'arrêt dans le code] vous permettront de documenter beaucoup plus facilement votre code et de le déboguer sans aucune incidence sur le temps d'exécution. Il ne faut pas utiliser les assertions pour le code final car elles provoquent l'arrêt de l'exécution du programme avec un code de retour correspondant à une erreur. Puisque les assertions ne sont jamais utilisées pour le code final, elles ne peuvent pas servir à trouver des erreurs à l'exécution comme par exemple l'échec d'une allocation de mémoire. Vous devez continuer à manipuler les conditions de retour de toutes les fonctions, en cas d'erreur, comme d'habitude.

Au contraire, les assertions vous permettent de documenter les hypothèses que vous faites lorsque vous développez. Elles vous permettent aussi de de déboguer les erreurs évidentes de logique que vous faites. Lorsque vous programmez, vous pouvez modifier vos assertions autour des erreurs que vous recherchez sans rester bloqué..

Considérons l'exemple de programme suivant :


#include <stdio.h>
#include <assert.h>

/*
This program is written to demonstrate the <stdlib.h> library.
This program will demonstrate the assert function
Written by James M. Rogers 12 April 1999
Released to the Public Domain on this date.

Compile this with the -DNDEBUG flag in order to _NOT_
compile the assert statement.
So all production boxes should compile with the -DNDEBUG flag.
*/

main (){
    int i=1;
    int j=0;
    assert(j!=0);
    printf("%s\n", i/j);
}

J'y montre l'utilisation d'assertion dans un cas simple qui nécessite deux nombres et divise le premier par le deuxième. Compilez le programme de la manière suivante :

gcc -DNDEBUG assert_example.c -o assert

Exécutez ./assert et essayez de diviser par la valeur zero. Le drapeau NDEBUG oblige votre assertion à ne pas produire de code d'exécution. Ce drapeau pourra être utilisé dans tous les environnements de développement.

Votre programme se terminera avec la création d'un fichier core et quasiment aucune indication du problème dans le message d'erreur. Maintenant recompilez le programme de la manière suivante :

gcc assert_example.c -o assert

Maintenant, lancez à nouveau l'exécution du programme et essayez de diviser par zéro. Cette fois-ci, il devrait être très facile d'identifier le problème et de localiser la ligne exacte où celui-ci se déclare.

Comme toujours, si vous voyez une erreur dans mes documents, s'il vous plaît, faites-le moi savoir pour que je puisse la corriger dans un document ultérieur. Consultez les corrections à la fin de ce document, s'il y a lieu, pour trouver les corrections concernant mes précédents articles.

9.2 Assertions

#include <assert.h>

void assert(int expression);

9.3 Bibliographie

The ANSI C Programming Language, Second Edition, Brian W. Kernighan, Dennis M. Ritchie, Printice Hall Software Series, 1988

The Standard C Library, P. J. Plauger, Printice Hall P T R, 1992

The Standard C Library, Parts 1, 2, and 3, Chuck Allison, C/C++ Users Journal, January, February, March 1995

STDIO(3), BSD MANPAGE, Manuel du programmeur Linux, 29 Novembre 1993

Articles précédents sur la "Bibliothèque standard C pour Linux" :

La bibliothèque standard C pour Linux, première partie, James M. Rogers, Janvier 1998
La bibliothèque standard C pour Linux, deuxième partieo, James M. Rogers, Juillet 1998
La bibliothèque standard C pour Linux, troisième partie, James M. Rogers, Août 1998
La bibliothèque standard C pour Linux, quatrième partie, James M. Rogers, Mars 1998
La bibliothèque standard C pour Linux, cinquième partie, James M. Rogers, Avril 1998

Copyright © 1999, James M. Rogers - Publié dans le n°41 de la Linux Gazette, mai 1999.

Adaptation française de Thierry Hamon thierry.hamon@lipn.univ-paris13.fr.


Next Previous Contents