Un préprocesseur C peut-il éliminer les blocs #ifdef inutiles ?
La compilation conditionnelle avec #ifdef est essentielle pour inclure du code uniquement lorsque des macros spécifiques sont définies ou indéfini. Cependant, au fil du temps, les macros peuvent devenir obsolètes ou inutilisées, laissant derrière elles du code mort.
Pour résoudre ce problème, les développeurs ont recherché une variante de préprocesseur capable d'analyser les définitions de macro spécifiées par l'utilisateur (-D) et non définies (- U) et éliminez ensuite les blocs #ifdef inutiles.
Exemple :
Considérez ce qui suit code :
#ifdef NAME1 #define ALBUQUERQUE "ambidextrous" #else #define PHANTASMAGORIA "ghostly" #endif
Si le préprocesseur a été exécuté avec '-DNAME1', il devrait afficher :
#define ALBUQUERQUE "ambidextrous"
Avec '-UNAME1', il devrait générer :
#define PHANTASMAGORIA "ghostly"
Outil proposé :
L'outil proposé, connu sous le nom unifdef et son successeur sunifdef, remplissent cette exigence. Il analyse le code d'entrée en conjonction avec les définitions et éliminations de macro fournies par l'utilisateur.
Exemple 1 :
#ifdef USE_VOID #ifdef PLATFORM1 #define VOID void #else #undef VOID typedef void VOID; #endif /* PLATFORM1 */ typedef void * VOIDPTR; #else typedef mint VOID; typedef char * VOIDPTR; #endif /* USE_VOID */
Sortie avec -DUSE_VOID -UPLATFORM1 :
#undef VOID typedef void VOID; typedef void * VOIDPTR;
Exemple 2 :
#ifndef DOUBLEPAD #if (defined NT) || (defined OLDUNIX) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
Sortie avec -UOLDUNIX :
#ifndef DOUBLEPAD #if (defined NT) #define DOUBLEPAD 8 #else #define DOUBLEPAD 0 #endif /* NT */ #endif /* !DOUBLEPAD */
Avantages :
L'utilisation d'unifdef ou de sunifdef offre plusieurs avantages, notamment :
Comme l'exemple l'illustre, l'outil peut gérer des conditions complexes et des # imbriqués ifdef bloque efficacement. C'est un outil puissant pour gérer des bases de code volumineuses et évolutives.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!