ASSERT |
Affirmez |
---|---|
Langage C++ | cassert (assert.h) |
Syntaxe
void assert(int exp); |
Paramètres
Nom | Description |
---|---|
exp | Ce paramètre permet d'indiquer l'assertion |
Description
Cette fonction permet de vérifier le programme.
Remarques
- La fonction assert(), définie dans l'entête cassert, écrit les informations d'erreur dans la sortie d'erreur standard (stderr), puis abandonne l'exécution du programme si l'expression exp est évaluée à zéro. Sinon, la fonction assert() ne fait rien. Bien que la sortie exacte soit définie par la mise en oeuvre, de nombreux compilateurs utilisent un message similaire à celui-ci :
- La fonction assert() est généralement utilisée pour aider à vérifier qu'un programme fonctionne correctement, l'expression étant conçue de telle sorte qu'elle n'évalue la valeur true que lorsqu'aucune erreur ne s'est produite.
- Il n'est pas nécessaire de supprimer les instructions assert() du code source une fois qu'un programme est débogué car si la macro NDEBUG est définie (comme n'importe quoi), les fonctions assert() seront ignorées.
- Définition et utilité : La fonction assert est utilisée pour effectuer des vérifications de conditions à l'exécution du programme. Elle permet de vérifier si une expression donnée est vraie. Si l'expression est fausse, l'exécution du programme est interrompue et un message d'erreur est affiché. Cela aide à détecter des erreurs logiques ou des hypothèses invalides pendant le développement.
- Inclure le bon entête : Pour utiliser assert en C++, il faut inclure l'entête <cassert>. Cette fonction fait partie de la bibliothèque standard C/C++ et est activée par défaut en mode débogage. En production, elle peut être désactivée en définissant la macro NDEBUG avant l'inclusion du fichier d'entête, ce qui supprime le code d'assertion et améliore les performances.
- Comportement en cas de condition faible : Si la condition passée à assert est évaluée à false, un message d'erreur est généré, indiquant l'échec de l'assertion. Ce message inclut généralement le fichier source, le numéro de ligne où l'échec s'est produit et l'expression qui a échoué. Par exemple :
- Désactivation des assertions : Si NDEBUG est défini, les appels à assert sont complètement ignorés, et aucune vérification n'est effectuée. Cela
permet de désactiver les assertions dans la version finale du programme pour éviter toute surcharge inutile. Par exemple :
- #define NDEBUG // Les assertions seront désactivées
- #include <cassert>
- Utilisation pour Vérifications de préconditions et postconditions : assert est couramment utilisé pour vérifier des préconditions et des postconditions dans des fonctions ou des méthodes. Par exemple, avant d'effectuer une division, on peut utiliser assert pour vérifier que le diviseur n'est pas égal à zéro. Cela permet d'éviter des erreurs graves liées à des valeurs inattendues.
- Limites de l'usage de assert : Bien que assert soit très utile pendant le développement, il n'est pas destiné à la gestion des erreurs dans un programme en production. En effet, une assertion échouée arrête immédiatement le programme, ce qui n'est pas souhaitable pour une application en production. Il est préférable d'utiliser des mécanismes plus robustes comme les exceptions ou les codes d'erreur dans ces cas-là.
- Débogage et diagnostic : Lors du développement et du débogage, les assertions peuvent être extrêmement utiles pour détecter des bogues. Elles permettent d'identifier des erreurs dès qu'une condition incorrecte est rencontrée, ce qui est souvent bien plus rapide que de laisser un bogue non détecté jusqu'à la phase de test ou de production. assert aide ainsi à vérifier des hypothèses internes du programme.
- Comportement en mode Release : Dans un environnement de production ou une version "release", où les assertions sont généralement désactivées, assert n'a aucun effet sur le programme. Cela garantit que le programme continue de s'exécuter normalement sans ralentissement ou overhead lié aux vérifications d'assertion. Il est important de se rappeler que le but d'assert est de faciliter le débogage et de ne pas perturber la performance en production.
Assertion failed: expression, file file, line linenum |
L'exécution du programme est ensuite arrêtée à cet endroit, ce qui peut faciliter le débogage.
Exemple
Voici un exemple montrant une utilisation à la suite d'un test :

on pourrait obtenir résultat suivant si le fichier est source est situé dans «C:\SOURCE\SAMPLES\CPP\functionassert\main.cpp» :
Assertion failed: b==NULL, file C:\SOURCE\SAMPLES\CPP\functionassert\main.cpp, line 11Voir également
Langage de programmation - C - Référence procédures et fonctions - assert
Références
Langage C, Edition Micro-Application, Gehard Willms, 2001, ISBN: 2-7429-2008-0, page 730.
Borland C++ for Windows 4.0, Library Reference, Edition Borland, 1993, Part # BCP1240WW21772, page 31.
Dernière mise à jour : Lundi, le 3 août 2015