J'ai mon code plein d'appel à assert(condition)
. Dans la version de débogage, j'utilise g++ -g
exploitant mon assertion. À ma grande surprise, je peux voir l'assertion fonctionner également dans ma version finale, celle compilée sans -g
option.
Comment désactiver complètement lors de la compilation mon assertion? Dois-je définir explicitement NDEBUG
dans n'importe quelle version que je produis malgré le débogage, la version ou quoi que ce soit d'autre?
Vous devez #define NDEBUG
(ou utilisez l'indicateur -DNDEBUG
avec g ++) cela désactivera l'assertion tant qu'il est défini avant l'inclusion du fichier d'en-tête assert.
Utilisez #define NDEBUG
7.2 Diagnostics
1 L'en-tête définit la macro assert et fait référence à une autre macro,
NDEBUG
qui n'est pas dé fi ni par
<assert.h>
. Si NDEBUG est défini comme un nom de macro au point du fichier source où est inclus, la macro assert est définie simplement comme
#define assert(ignore) ((void)0)
La macro assert est redéfinie selon l'état actuel de NDEBUG chaque fois que
<assert.h>
Est inclus.
Vous pouvez soit désactiver complètement les assertions en
#define NDEBUG
#include <assert.h>
ou vous pouvez définir NDEBUG (via -DNDEBUG) dans votre procédure makefile/build selon que vous souhaitez une version productive ou de développement.
Le -g
flag n'affecte pas le fonctionnement de assert
, il s'assure simplement que divers symboles de débogage sont disponibles.
La définition de NDEBUG
est la manière standard (comme dans la norme officielle ISO) de désactiver les assertions.
Oui, définissez NDEBUG
sur la ligne de commande/système de build avec l'option préprocesseur/compilateur -DNDEBUG
.
Cela n'a rien à voir avec les informations de débogage insérées par -g
.