#include <assert.h> // <cassert> en C++
NDEBUG n'est pas définie par <assert.h>. C'est une macro que vous pouvez définir vous-même avant
d'inclure cet entête. Sa présence modifie alors la définition de assert : les assertions deviennent inactives.
Il est important de définir NDEBUG avant l'inclusion de <assert.h>. Si vous la définissez après,
la macro assert déjà obtenue ne sera pas modifiée pour cette inclusion.
Dans le code suivant, l'appel à assert est désactivé parce que NDEBUG est défini avant l'inclusion de l'entête.
1 2 3 4 5 6 7 8 9 10 11 |
#define NDEBUG #include <assert.h> #include <stdio.h> int main() { assert( 0 ); /* Cette assertion ne stoppe pas le programme. */ puts( "Fin du programme" ); return 0; } |
On préfère souvent définir NDEBUG dans les options de compilation de la configuration de production.
$> gcc -Wall -DNDEBUG sample.c -o sample
ISO C et POSIX indiquent que assert est redéfini à chaque inclusion de <assert.h>, en fonction de l'état
courant de NDEBUG. Cette possibilité existe, mais il est généralement plus lisible de ne pas changer ce réglage au milieu
d'un fichier source.
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 :