J'ai une classe très basique, nommée Basic, utilisée dans presque tous les autres fichiers d'un plus grand projet. Dans certains cas, il est nécessaire d'avoir une sortie de débogage, mais en mode release, cela ne devrait pas être activé et être un NOOP.
Actuellement, il existe une définition dans l'en-tête, qui active ou désactive un makro, en fonction du paramètre. Il s'agit donc bien d'un NOOP, lorsqu'il est désactivé. Je me demande, si j'ai le code suivant, si un compilateur (MSVS / gcc) est capable d'optimiser l'appel de fonction, de sorte qu'il soit à nouveau un NOOP. (En faisant cela, le commutateur pourrait être dans le .cpp et la commutation sera beaucoup plus rapide, en termes de temps de compilation/liaison).
--Header--
void printDebug(const Basic* p);
class Basic {
Basic() {
simpleSetupCode;
// this should be a NOOP in release,
// but constructor could be inlined
printDebug(this);
}
};
--Source--
// PRINT_DEBUG defined somewhere else or here
#if PRINT_DEBUG
void printDebug(const Basic* p) {
// Lengthy debug print
}
#else
void printDebug(const Basic* p) {}
#endif