Macros en C++

Introduction aux Macros

Les macros sont des étiquettes que l'on définit dans le code source et qui sont substituées par leur valeur par le préprocesseur avant la compilation. Elles sont initialisées grâce à la commande #define et peuvent être annulées avec la commande #undef.

Macros de Type Objet

Ces types de macros sont remplacés par leur valeur à la compilation. Leur but principal est de définir des constantes utilisées dans le code.

Remarque : Les définitions de macro ne doivent pas être suivies d'un point-virgule ;.

Exemple :

#include 
using namespace std;
#define PI 3.1416
int main() {
    float radius = 3;
    float area;
    area = PI * radius * radius;
    cout << "Area is " << area;
    return 0;
}

Sortie :

Area is 28.2744

Macros de Type Fonction

Ces macros fonctionnent comme des fonctions en prenant des arguments qui sont utilisés dans le code substitué.

Remarque : Lors de la définition d'une macro de type fonction, il ne doit pas y avoir d'espace entre le nom de la macro et la parenthèse ouvrante.

Exemple :

#include 
using namespace std;
#define PI 3.1416
#define AREA(r) r * r * PI
int main() {
    float radius = 5;
    float result;
    result = AREA(radius);
    cout << "Area is " << result;
    return 0;
}

Sortie :

Area is 78.54

Macros Prédéfinies

C++ fournit plusieurs macros prédéfinies, incluant :

  • __DATE__ : date actuelle sous forme MMM DD YYYY.
  • __TIME__ : heure actuelle sous forme HH:MM:SS.
  • __FILE__ : nom du fichier en cours.
  • __LINE__ : numéro de la ligne actuelle.

Exemple :

#include 
using namespace std;
int main() {
    char file[] = __FILE__;
    char date[] = __DATE__;
    char time[] = __TIME__;
    int line = __LINE__;
    cout << "File name: " << file << "\n";
    cout << "Date: " << date << "\n";
    cout << "Time: " << time << "\n";
    cout << "Line number: " << line << "\n";
}

Sortie :

File name: main.cpp
Date: Jun 25 2022
Time: 14:17:50
Line number: 9

Annulation d'une Macro

Une fois qu'une macro est définie, elle peut être annulée avec la commande #undef. Utiliser la macro après cela entraînera une erreur de compilation.

Exemple :

#include 
using namespace std;
#define TEST 1
int main() {
    #ifdef TEST
        cout << "TEST defined\n";
    #else
        cout << "TEST undefined\n";
    #endif
    #undef TEST
    #ifdef TEST
        cout << "TEST defined\n";
    #else
        cout << "TEST undefined\n";
    #endif
}

Sortie :

TEST defined
TEST undefined