3 votes

Qu'est-ce que signifie par bloc préprocesseur "inactive" en C ?

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?

6voto

SingerOfTheFall Points 9936

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.

1voto

A.B. Points 843

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é.

entrez la description de l'image ici

J'espère que cela vous aidera.

1voto

StoryTeller Points 6139

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 :

  1. Commenter complètement du code :

    #if 0
    // Le code ici n'est jamais compilé. Il est "commenté"
    #endif
  2. 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
  3. Faire en sorte qu'une macro comme assert se comporte de différentes manières.

  4. 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;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X