C Préprocesseur et macros

Dans ce tutoriel, 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 (vous permet de définir des macros) qui transforme votre programme avant sa compilation. Ces transformations peuvent être l'inclusion d'un fichier d'en-tête, d'extensions de macro, 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:

Y compris les fichiers d'en-tête: #include

Le #includepréprocesseur est utilisé pour inclure des fichiers d'en-tête aux programmes C. Par exemple,

 #include 

Voici stdio.hun fichier d'en-tête. La #includedirective du préprocesseur remplace la ligne ci-dessus par le contenu du stdio.hfichier d'en-tête.

C'est la raison pour laquelle vous devez utiliser #include avant de pouvoir utiliser des fonctions telles que 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 un nom est attribué. Vous pouvez définir une macro en C à l'aide de la #definedirective 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 preprocessor

 #include #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 se rencontre circleArea(argument), il est remplacé par (3.1415*(argument)*(argument)).

Supposons que nous ayons passé 5 comme argument puis, il se développe comme ci-dessous:

 circleArea(5) expands to (3.1415*5*5)

Exemple 2: Utilisation du préprocesseur #define

 #include #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 #define preprocessor.

Compilation conditionnelle

En programmation C, vous pouvez indiquer au préprocesseur s'il doit inclure un bloc de code ou non. Pour ce faire, des directives conditionnelles peuvent être utilisées.

C'est similaire à une ifdéclaration avec une différence majeure.

L' ifinstruction est testée pendant le temps d'exécution pour vérifier si un bloc de code doit être exécuté ou non alors que les conditions sont utilisées pour inclure (ou sauter) 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 conditionnelle, #ifdef, #if, #defined, #elseet les #elseifdirectives 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.

Directive #if, #elif et #else

 #if expression // conditional codes #endif 

Ici, l'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ée à une valeur différente de zéro.

La #elsedirective facultative peut être utilisée avec la #ifdirective.

 #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… #elseutilisation#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 

#defined

L'opérateur spécial #defined est utilisé pour tester si une certaine macro est définie ou non. Il est souvent utilisé avec la directive #if.

 #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 en utilisant __TIME__

Le programme suivant sort l'heure actuelle en utilisant la __TIME__macro.

 #include int main() ( printf("Current time: %s",__TIME__); )

Production

 Heure actuelle: 19:54:39

Lectures recommandées

  • Contrôle de ligne
  • Pragmas
  • Sortie préprocesseur
  • Autres directives

Articles intéressants...