Je compte sur NDEBUG
car c'est la seule dont le comportement est normalisé entre les compilateurs et les implémentations (voir la documentation de la macro assert standard). La logique négative est un petit obstacle à la lisibilité, mais c'est un idiome commun auquel vous pouvez vous adapter rapidement.
Se fier à quelque chose comme _DEBUG
serait de s'appuyer sur un détail d'implémentation d'un compilateur et d'une bibliothèque particuliers. D'autres compilateurs peuvent choisir ou non la même convention.
La troisième option consiste à définir votre propre macro pour votre projet, ce qui est tout à fait raisonnable. Avoir votre propre macro vous donne une portabilité entre les implémentations et vous permet d'activer ou de désactiver votre code de débogage indépendamment des assertions. Cependant, en général, je déconseille d'avoir différentes classes d'informations de débogage qui sont activées au moment de la compilation, car cela entraîne une augmentation du nombre de configurations que vous devez construire (et tester) pour un bénéfice relativement faible.
Avec l'une ou l'autre de ces options, si vous utilisez un code tiers dans le cadre de votre projet, vous devrez savoir quelle convention il utilise.