{{tag>dev c cpp todo}} ====== Le préprocesseur ====== Le préprocesseur (de texte) est un programme s’exécutant avant la compilation. Il parcours le fichier source à la recherche de directives de précompilation (introduites par le caractères '#') qu'il traite et remplace. ===== Directive include ===== Lorsque le préprocesseur rencontre la directive **%%#include%%**, il insère littéralement le contenu du fichier indiqué à l'endroit du**%%#include%%**. ===== Directive define ===== Cette directive permet de définir une constante de préprocesseur. Cela permet d'associer une valeur à un mot: #define MAX_LENGTH 110 Dans cet exemple, lors de son exécution, le préprocesseur remplacera toutes les occurrences du mot **MAX_LENGTH** dans le fichier source par la valeur **110**. On notera: * que la directive define a une **portée** qui s'étend à l'ensemble du **fichier**; * que la constante définie par la directive define n'occupe pas de place en mémoire contrairement à une définition du type %%const int MAX_LEGHT = 110;%% Les constantes de préprocesseur permettent de "configurer" le programme avant sa compilation. C'est une sorte de mini-configuration. les directives "define" sont généralement placés dans des fichiers d' entête (.h), à proximité des prototypes. ===== Principaux usages ===== On utilise souvent les directives define pour donner une taille maximale à des tableaux ou buffers. ===== Bonnes pratiques ===== ==== Inclusions infinies ==== Pour éviter les inclusions infinies, une bonne pratique consiste à systématiquement déclarer une constante lors de la première inclusion grâce à une condition. Si une autre inclusion est #ifndef FILE_H // Si la constante n'a pas été définie le fichier n'a jamais été inclus #define FILE_H // On définit la constante pour que la prochaine fois le fichier ne soit plus inclus /* Contenu de votre fichier .h (autres include, prototypes, define...) */ #endif // FILE_H ===== Synthèse ===== * Le préprocesseur est un programme qui analyse le code source et y effectue des modifications avant la compilation. Il travaille sur un fichier source et produit un fichier source. * L'instruction de préprocesseur **#include** insère le contenu d'un autre fichier. * L'instruction **#define** définit une constante de préprocesseur. Elle permet de remplacer un mot-clé par une valeur dans le code source. * Les macros sont des morceaux de code tout prêts définis à l'aide d'un **#define**. Ils peuvent accepter des paramètres. * Il est possible d'écrire des conditions en langage préprocesseur pour choisir ce qui sera compilé. On utilise notamment les mots-clés **#if**, **#elif** et **#endif**. * Pour éviter qu'un fichier.h ne soit inclus un nombre infini de fois, on le protège à l'aide d'une combinaison de constantes de préprocesseur et de conditions. ===== Références ===== * https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/15954-le-preprocesseur