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 assert

La librairie La macro NDEBUG


Entête à inclure

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

Macro assert

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.

Exemple de code

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;
}
Utilisation de la macro assert

Désactivation des assertions

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

Sujets connexes

NDEBUG
static_assert
__STDC_VERSION_ASSERT_H__
abort


La librairie La macro NDEBUG




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