1. Qu’est-ce que #define ?

  • #define est une directive du préprocesseur C.
  • Elle sert à définir des constantes ou des macros avant la compilation.
  • Le préprocesseur remplace toutes les occurrences du nom défini par la valeur correspondante dans le code.

Syntaxe basique

#define NOM valeur
  • NOM est le nom que tu choisis (souvent en majuscules pour les constantes).
  • valeur peut être un nombre, un texte, une expression, voire du code.

Exemple simple : constantes

#define PI 3.14159
#define MAX 100
#define ON 1
#define OFF 0

Formules à substituer

#define SQUARE(x) ((x) * (x))

exemple d’utilisation:

int a = 5;
int b = SQUARE(a);  // équivaut à 5*5 = 25

Exemple complet

#include <stdio.h>

#define ON 1
#define OFF 0
#define SQUARE(x) ((x) * (x))

int main() {
    int etat = ON;

    if (etat == ON) {
        printf("Allumé\n");
    } else {
        printf("Éteint\n");
    }

    int val = 4;
    printf("Carré de %d = %d\n", val, SQUARE(val));

    return 0;
}

Résumé rapide

ÉlémentRôleExemple
#defineRemplacement texte#define PI 3.14
ConstanteValeur fixe#define MAX 100
Macro fonctionMacro avec paramètres#define MUL(x,y) ((x)*(y))

Pré compilateur

#include <stdio.h>
#define PI 3.14

int main() {
    printf("Pi = %f\n", PI);
    return 0;
}

on voit la substitution

etudiant@ordi:~/Works/TP3_C/precomp$ vi precomp.c
etudiant@ordi:~/Works/TP3_C/precomp$ gcc precomp.c -E
# 0 "precomp.c"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "precomp.c"
nclude <stdio.h>


int main() {
    printf("Pi = %f\n", 3.14);
    return 0;
}
etudiant@ordi:~/Works/TP3_C/precomp$ 

autre façon d’arrêter à la précompilation

etudiant@ordi:~/Works/TP3_C/precomp$ gcc -E precomp.c -o precomp.i
etudiant@ordi:~/Works/TP3_C/precomp$ cat precomp.i
# 0 "precomp.c"
# 0 "<built-in>"
# 0 "<command-line>"
# 1 "/usr/include/stdc-predef.h" 1 3 4
# 0 "<command-line>" 2
# 1 "precomp.c"
nclude <stdio.h>


int main() {
    printf("Pi = %f\n", 3.14);
    return 0;
}
etudiant@ordi:~/Works/TP3_C/precomp$