Participer au site avec un Tip
Rechercher
 

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 :

Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé

Macro NDEBUG

La macro assert L'instruction static_assert


Entête à inclure

#include <assert.h>  // <cassert> en C++

Macro NDEBUG

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.

Exemple de code

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;
}
Désactivation locale des assertions

Avec gcc

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

Réinclusion de l'entête

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.

Sujets connexes

assert
static_assert


La macro assert L'instruction static_assert




Vous êtes un professionnel et vous avez besoin d'une formation ? Programmation avec
Le langage C
Voir le programme détaillé