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 :

Macro assert

La librairie L'instruction static_assert


Entête à  inclure

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

Macro assert

void assert( int condition );

Une assertion est utilisée pour tester l'état d'une variable ou d'une zone de mémoire : si la valeur qui y est stockée est incohérente par rapport à ce que vous attendez, votre programme sera alors interrompu et un message d'erreur sera alors affiché sur la console. On peut penser que ce mécanisme est proche d'une levée d'exception comme dans un langage orienté objet (C++ notamment). Ce n'est pas complétement faux, mais il faut noter deux différences : vous ne pouvez pas intercepter une assertion et le mécanisme d'assertion peut globalement être court-circuité pour votre programme (par exemple, vous pouvez activer les assertions en mode debug et les couper en mode release).

Pour utiliser une assertion, invoquer la macro assert en lui passant en paramètre une expression (par exemple, une comparaison de pointeur avec NULL). Si le résultat de l'expression est vrai, le programme se poursuit. Si, au contraire l'expression est fausse l'assertion est levée et votre programme interrompu.

Pour court-circuiter le mécanisme d'assertions, sans commenter les appels à assert (bien entendu), il vous suffit de définir la macro NDEBUG avant la ligne #include <assert.h>. Une recompilation de l'intégralité du programme sera nécessaire. Si vous placez la définition de la macro à la suite de l'inclusion du module d'assertions, cela n'aura aucun effet.

Vous pouvez aussi définir cette macro NDEBUG directement lors du lancement de votre compilateur. Ainsi aucune modification du code source ne sera nécessaire. Voici un petit exemple de lancement du compilateur gcc avec définition de la macro NDEUBG (l'option -D permettant cette définition).

$> gcc -c -Wall -DNDEBUG=1 file.c

Paramètres

Valeur de retour

Aucune valeur de retour n'est produite pas cette fonction.

Exemple de code

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

int main( int argc, char * argv[] ) {
    
    /* Ce programme n'accepte, normalement, aucun argument. */
    assert( argc == 1 );

    printf( "Le programme peut se poursuivre normalement" );

    return 0;
}

Conseil : recompilez aussi votre programme avec la macro NDEBUG définie.



La librairie L'instruction static_assert