J'ai trouvé quelques lignes de code, celles-ci sont assombries dans mon bloc de préprocesseur de code source en C. Mon compilateur, MS Visual Studio, les nomme "bloc de préprocesseur inactif". Que cela signifie-t-il, est-ce que mon compilateur ne considérera pas ces lignes de code, et comment les rendre actives?
Réponses
Trop de publicités?Un bloc de préprocesseur inactif est un bloc de code qui est désactivé en raison d'une directive de préprocesseur. L'exemple le plus simple est :
#if 0
// tout ce qui est ici est inactif et sera ignoré lors de la compilation
#endif
Un exemple plus courant serait
#ifdef SOME_VAR
// code
else
// autre code
#endif
Dans ce cas, soit le premier bloc de code, soit le deuxième sera inactif en fonction de si SOME_VAR
est défini.
Veuillez vérifier cet exemple hypothétique créé pour élaborer votre question.
#include
#include
#define _WIN32
int add(int n1, int n2){return n1 + n2;}
LONGLONG add(LONGLONG n1, LONGLONG n2){return n1 + n2;}
int _tmain(int argc, _TCHAR* argv[])
{
#ifdef _WIN32
int val = add(10, 12);
#else
LONGLONG = add(100L, 120L);//Code inactif
#endif // _WIN32
return 0;
}
Vous pouvez voir que lorsque _WIN32 est défini, le code dans la directive #else du préprocesseur est désactivé et ne sera pas compilé. Vous pouvez annuler la définition de _WIN32 pour voir l'effet inverse. Veuillez consulter la capture d'écran de MS Visual Studio ci-jointe. La ligne en rouge est un code désactivé.
J'espère que cela vous aidera.
Le préprocesseur est l'une des premières étapes de la traduction d'un programme. Il peut modifier la source du programme avant que la compilation ne commence. De cette manière, vous pouvez configurer la source pour construire différemment, en fonction de diverses contraintes.
Les utilisations des blocs de condition du préprocesseur comprennent :
-
Commenter complètement du code :
#if 0 // Le code ici n'est jamais compilé. Il est "commenté" #endif
-
Fournir différentes implémentations en fonction de différentes contraintes, comme la plate-forme
#if defined(WIN32) // Implémentez le widget avec Win32Api #elif defined(MOTIF) // Implémentez le widget avec le framework Motif else #error "Plateforme inconnue" #endif
-
Faire en sorte qu'une macro comme
assert
se comporte de différentes manières. -
Veiller à ce qu'une abstraction utile soit définie de manière appropriée :
#if PLATFORM_A typedef long int32_t; #elif PLATFORM_B typedef int int32_t;