#include <assert.h> // <cassert> en C++
void assert( expression scalaire );
La macro assert permet de vérifier une condition à l'exécution. Si l'expression passée en paramètre est vraie,
l'exécution continue normalement. Si elle est fausse, un message de diagnostic est produit sur le flux d'erreur standard,
puis le programme est interrompu via abort.
Il s'agit bien d'une macro, et non d'une fonction. Il ne faut donc pas chercher à prendre son adresse, ni supprimer sa définition
pour appeler une hypothétique fonction assert : le comportement serait indéfini.
Le programme suivant refuse de continuer si le pointeur retourné par malloc est nul.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
#include <assert.h> #include <stdio.h> #include <stdlib.h> int main() { int * values = malloc( 10 * sizeof *values ); assert( values != NULL ); values[0] = 42; printf( "Premiere valeur : %d\n", values[0] ); free( values ); return EXIT_SUCCESS; } |
Si la macro NDEBUG est définie avant l'inclusion de <assert.h>, les appels à
assert sont remplacés par une expression qui ne fait rien. C'est une pratique classique pour conserver des vérifications
fortes en développement, puis les retirer d'une version de production.
La ligne suivante montre comment demander cette désactivation au compilateur, sans modifier le fichier source.
$> gcc -Wall -DNDEBUG=1 sample.c -o sample
Améliorations / Corrections
Vous avez des améliorations (ou des corrections) à proposer pour ce document : je vous remerçie par avance de m'en faire part, cela m'aide à améliorer le site.
Emplacement :
Description des améliorations :