Retour au cours

Directives de préprocesseur (Partie 1 : #include et #define)

Langage C : de Zéro à Héros - Le Guide Complet pour Débutants

Leçon 26 : Directives de préprocesseur (Partie 1)

Le préprocesseur est la première phase de la compilation. Il lit le code source et effectue certaines substitutions de texte avant que le compilateur proprement dit ne voie le code. Les directives commencent par le symbole #.

1. Directive #include

Utilisée pour inclure le contenu d'un autre fichier (généralement un fichier d'en-tête) dans le fichier actuel.

a) En-têtes de la bibliothèque standard

Utilise des chevrons (<>) pour chercher dans les répertoires système prédéfinis.

c #include <stdio.h> #include <math.h>

b) En-têtes définis par l'utilisateur

Utilise des guillemets doubles ("") pour chercher d'abord dans le répertoire source actuel.

c #include "mon_utilitaire.h"

2. Directive #define (Macros)

Utilisée pour définir des constantes symboliques (macros). Partout où l'identifiant est utilisé dans le code, le préprocesseur le remplace par le texte de substitution.

a) Définition de constantes simples

c #define MAX_SIZE 100

int tableau[MAX_SIZE]; // Remplacé par int tableau[100];

b) Définition de macros de type fonction

Les macros peuvent accepter des arguments. Elles effectuent une substitution de texte et non des appels de fonction (évitant ainsi le surcoût lié à l'appel).

c // ATTENTION : Les macros sont de simples substitutions et peuvent causer des effets secondaires ! #define CARRE(x) (x * x)

int y = CARRE(5); // y = (5 * 5) -> 25

// Mauvais exemple : CARRE(a++) devient (a++ * a++), exécutant a++ deux fois.

Bonne pratique : Mettez toujours des parenthèses autour des arguments de la macro et de la définition elle-même pour éviter les problèmes de priorité des opérateurs.