Macros en français

Qu'est-ce qu'un macro ?

Un macro est une étiquette définie dans le code source qui sera remplacée par sa valeur par le préprocesseur avant la compilation. Pour initialiser un macro, on utilise la commande #define, et pour le désactiver, on emploie la commande #undef.

Les macros de type objet

Ces macros sont substituées par leur valeur dans le code source avant la compilation. Leur principal objectif est de définir des constantes à utiliser dans le code.

Note : Les définitions de macros ne nécessitent pas de point-virgule ; à la fin.

Exemple : Dans l'exemple suivant, PI est défini comme une macro de type objet :

#include 
#define PI 3.1416

int main() {
    float radius = 3;
    float area;
    area = PI * radius * radius;
    printf("La surface est : %f", area);
    return 0;
}

Ce code produit la sortie suivante :

La surface est : 28.274401

Macros de type fonction

Ces macros fonctionnent comme de véritables fonctions, prenant des arguments qui seront utilisés dans le code substitué. Il est important de noter qu'il ne doit pas y avoir d'espace entre le nom de la macro et la parenthèse d'ouverture lors de leur définition.

Exemple : Dans l'exemple suivant, AREA est défini comme une macro de type fonction. Notez que d'autres macros peuvent être utilisées pour définir une macro suivante. La macro intérieure est remplacée par sa valeur avant que la macro extérieure ne soit substituée :

#include 
#define PI 3.1416
#define AREA(r) r * r * PI

int main() {
    float radius = 5;
    float result;
    result = AREA(radius);
    printf("La surface est : %f", result);
    return 0;
}

La sortie de ce code sera :

La surface est : 78.540001

Macros prédéfinies

Le langage C dispose d'un certain nombre de macros prédéfinies, parmi lesquelles : - DATE : date actuelle formatée sous la forme MMM DD YYYY. - TIME : heure actuelle formatée sous la forme HH:MM:SS. - FILE : nom du fichier courant. - LINE : numéro de la ligne actuelle.

Exemple : Le code suivant utilise les macros prédéfinies mentionnées :

#include 

int main() {
    char file[] = __FILE__;
    char date[] = __DATE__;
    char time[] = __TIME__;
    int line = __LINE__;
    printf("Nom du fichier : %s\n", file);
    printf("Date : %s\n", date);
    printf("Heure : %s\n", time);
    printf("Numéro de ligne : %d\n", line);
}

Ce code génère une sortie similaire à :

Nom du fichier : main.c
Date : Jun 25 2022
Heure : 14:05:33
Numéro de ligne : 7

Désactivation d'une macro

Une fois qu'une macro est définie, elle peut être désactivée grâce à la commande #undef. Utiliser la macro après sa désactivation entraînera une erreur de compilation.

Exemple :

#include 
#define TEST 1

int main() {
    #ifdef TEST
        printf("TEST défini\n");
    #else
        printf("TEST non défini\n");
    #endif
    #undef TEST
    #ifdef TEST
        printf("TEST défini\n");
    #else
        printf("TEST non défini\n");
    #endif
}

Ce code produit la sortie suivante :

TEST défini
TEST non défini