Outils pour utilisateurs

Outils du site


dev:c-cpp:preprocesseur
, , ,

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

file.h
#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

dev/c-cpp/preprocesseur.txt · Dernière modification : 2021/04/18 11:03 de 77.192.232.26