Préprocesseur C et macros
Préprocesseur C et Macros
Dans ce didacticiel, vous découvrirez les préprocesseurs c et vous apprendrez à utiliser #include, #define et la compilation conditionnelle à l'aide d'exemples.

Le préprocesseur C est un préprocesseur de macro (permet de définir des macros) qui transforme votre programme avant qu'il ne soit compilé. Ces transformations peuvent être l'inclusion d'un fichier d'en-tête, d'extensions de macros, etc.
Toutes les directives de prétraitement commencent par un #
symbole. Par exemple,
#define PI 3.14
Certaines des utilisations courantes du préprocesseur C sont :
Incluant les fichiers d'en-tête :#include
Le #include
Le préprocesseur est utilisé pour inclure des fichiers d'en-tête dans les programmes C. Par exemple,
#include <stdio.h>
Ici, stdio.h
est un fichier d'en-tête. Le #include
La directive du préprocesseur remplace la ligne ci-dessus par le contenu de stdio.h
fichier d'en-tête.
C'est la raison pour laquelle vous devez utiliser #include <stdio.h>
avant de pouvoir utiliser des fonctions comme scanf()
et printf()
.
Vous pouvez également créer votre propre fichier d'en-tête contenant la déclaration de fonction et l'inclure dans votre programme à l'aide de cette directive de préprocesseur.
#include "my_header.h"
Visitez cette page pour en savoir plus sur l'utilisation des fichiers d'en-tête.
Macros utilisant #define
Une macro est un fragment de code auquel on donne un nom. Vous pouvez définir une macro en C en utilisant le #define
directive du préprocesseur.
Voici un exemple.
#define c 299792458 // speed of light
Ici, lorsque nous utilisons c dans notre programme, il est remplacé par 299792458
.
Exemple 1 :#define préprocesseur
#include <stdio.h>
#define PI 3.1415
int main()
{
float radius, area;
printf("Enter the radius: ");
scanf("%f", &radius);
// Notice, the use of PI
area = PI*radius*radius;
printf("Area=%.2f",area);
return 0;
}
Fonctionne comme des macros
Vous pouvez également définir des macros qui fonctionnent de la même manière qu'un appel de fonction. Ceci est connu sous le nom de macros de type fonction. Par exemple,
#define circleArea(r) (3.1415*(r)*(r))
Chaque fois que le programme rencontre circleArea(argument)
, il est remplacé par (3.1415*(argument)*(argument))
.
Supposons que nous passions 5 comme argument, il se développe comme ci-dessous :
circleArea(5) expands to (3.1415*5*5)
Exemple 2 :Utilisation du préprocesseur #define
#include <stdio.h>
#define PI 3.1415
#define circleArea(r) (PI*r*r)
int main() {
float radius, area;
printf("Enter the radius: ");
scanf("%f", &radius);
area = circleArea(radius);
printf("Area = %.2f", area);
return 0;
}
Visitez cette page pour en savoir plus sur les macros et le préprocesseur #define.
Compilation conditionnelle
En programmation C, vous pouvez demander au préprocesseur d'inclure ou non un bloc de code. Pour ce faire, des directives conditionnelles peuvent être utilisées.
C'est similaire à un if
déclaration avec une différence majeure.
Le if
L'instruction est testée pendant le temps d'exécution pour vérifier si un bloc de code doit être exécuté ou non, tandis que les conditions sont utilisées pour inclure (ou ignorer) un bloc de code dans votre programme avant l'exécution.
Utilisations du conditionnel
- utiliser un code différent selon la machine, le système d'exploitation
- compiler le même fichier source dans deux programmes différents
- pour exclure certains codes du programme mais pour les conserver comme référence à des fins futures
Comment utiliser le conditionnel ?
Pour utiliser le conditionnel, #ifdef
, #if
, #defined
, #else
et #elif
directives sont utilisées.
Directive #ifdef
#ifdef MACRO
// conditional codes
#endif
Ici, les codes conditionnels sont inclus dans le programme uniquement si MACRO est défini.
Directives #if, #elif et #else
#if expression
// conditional codes
#endif
Ici, expression est une expression de type entier (peut être des entiers, des caractères, une expression arithmétique, des macros, etc.).
Les codes conditionnels sont inclus dans le programme uniquement si l'expression est évalué à une valeur non nulle.
Le #else
facultatif directive peut être utilisée avec #if
directives.
#if expression
conditional codes if expression is non-zero
#else
conditional if expression is 0
#endif
Vous pouvez également ajouter des conditions imbriquées à votre #if...#else
en utilisant #elif
#if expression
// conditional codes if expression is non-zero
#elif expression1
// conditional codes if expression is non-zero
#elif expression2
// conditional codes if expression is non-zero
#else
// conditional if all expressions are 0
#endif
#défini
L'opérateur spécial #defined est utilisé pour tester si une certaine macro est définie ou non. Il est souvent utilisé avec #if directives.
#if defined BUFFER_SIZE && BUFFER_SIZE >= 2048
// codes
Macros prédéfinies
Voici quelques macros prédéfinies en programmation C.
Macro | Valeur |
---|---|
__DATE__ | Une chaîne contenant la date actuelle |
__FILE__ | Une chaîne contenant le nom du fichier |
__LINE__ | Un entier représentant le numéro de ligne actuel |
__STDC__ | Si suit la norme ANSI C, alors la valeur est un entier différent de zéro |
__TIME__ | Une chaîne contenant la date actuelle. |
Exemple 3 :obtenir l'heure actuelle à l'aide de __TIME__
Le programme suivant génère l'heure actuelle en utilisant __TIME__
macro.
#include <stdio.h>
int main()
{
printf("Current time: %s",__TIME__);
}
Sortie
Current time: 19:54:39
Lectures recommandées
- Contrôle de ligne
- Pragmas
- Sortie du préprocesseur
- Autres directives
Langue C