Aller au contenu

Chapitre 16 : Le Préprocesseur et les Macros

Découvrez comment transformer votre code source avant même qu'il ne soit transmis au compilateur.

Concepts abordés

  • Directives de préprocesseur : Utilisation de #include, #define, #undef.
  • Macros fonctionnelles : Créer des raccourcis de code avec des paramètres (ex: MAX, MIN, ABS).
  • Compilation conditionnelle : Utiliser #ifdef, #ifndef, #else, #endif pour compiler différentes parties du code selon le contexte (ex: mode DEBUG vs mode RELEASE).
  • Macros prédéfinies : Utilisation de __FILE__, __LINE__, __DATE__ pour le débogage et la traçabilité.
  • Opérateur de mise en chaîne (#) : Transformer un argument de macro en chaîne de caractères.

Explications du code

preprocesseur.c

Ce fichier illustre la puissance des macros pour simplifier les calculs mathématiques, créer des outils de journalisation (logs) conditionnels et utiliser les informations système fournies par le compilateur.

Conseils et astuces

  • Parenthèses obligatoires : Dans une macro, entourez toujours vos paramètres et l'expression entière de parenthèses (ex: #define CARRE(x) ((x) * (x))). Sans elles, les priorités d'opérations peuvent causer des bugs catastrophiques.
  • Effets de bord : Soyez prudent avec les macros : CARRE(i++) incrémentera i deux fois ! Pour des logiques complexes, préférez toujours une fonction classique ou une fonction static inline.
  • Include Guards : Utilisez toujours des gardes (ex: #ifndef MON_FICHIER_H) dans vos fichiers .h pour éviter les erreurs de double inclusion.