@CodingTheWheel:
Il y a un léger problème avec votre approche. Considérons un appel comme
XTRACE("x=%d", x);
Cela fonctionne bien dans la version debug, mais dans la version de publication, il sera étendu à:
("x=%d", x);
Ce qui est parfaitement légitime de C et de compiler et l'habitude de courir sans effets secondaires, mais génère du code inutile. L'approche que j'ai l'habitude de l'utiliser pour éliminer ce problème, c'est:
Faire de la XTrace fonction retourne un int (juste retour de 0, la valeur de retour n'a pas d'importance)
-
Modifier les #define dans le #else clause:
0 && XTrace
Maintenant, la version sera étendue à d':
0 && XTrace("x=%d", x);
et tout décent optimiseur de jeter le tout depuis l'évaluation de court-circuit qui aurait empêché quoi que ce soit après le && de jamais être exécutée.
Bien sûr, comme je l'ai écrit la dernière phrase, j'ai réalisé que peut-être la forme originale peut être optimisé à l'écart de trop et dans le cas d'effets secondaires, tels que les appels de fonction passés en paramètres à XTrace, il pourrait être une meilleure solution, car il fera en sorte que les versions debug et release va se comportent de la même.