Le préprocesseur C est un préprocesseur de macros (vous 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, des expansions 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 :

Inclusion de fichiers d’en-tête : #include

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

#include <stdio.h>

Ici, stdio.h est un fichier d’en-tête. La directive du préprocesseur #include remplace la ligne ci-dessus par le contenu du fichier d’en-tête stdio.h.

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 des fonctions et l’inclure dans votre programme en utilisant cette directive du 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 la directive #define 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 <stdio.h>#define PI 3.1415int 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;}

Macros de type fonction

Vous pouvez également définir des macros qui fonctionnent de manière similaire à un appel de fonction. C’est ce qu’on appelle les 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 avons passé 5 comme argument alors, il se développe comme ci-dessous :

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

Exemple 2 : Utilisation de #define preprocessor

#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 #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, on peut utiliser des directives conditionnelles.

C’est similaire à une instruction if avec une différence majeure.

L’instruction if 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 conditionnelles sont utilisées pour inclure (ou sauter) un bloc de code dans votre programme avant l’exécution.

Utilisations des conditionnels

  • utiliser un code différent selon la machine, le système d’exploitation
  • compiler le même fichier source dans deux programmes différents
  • exclure certains codes du programme mais les garder comme référence pour un usage futur

Comment utiliser les conditionnels ?

Pour utiliser le conditionnel, on utilise les directives #ifdef, #if, #defined, #else et #elseif.

#ifdef Directive

#ifdef MACRO // conditional codes#endif

Ici, les codes conditionnels sont inclus dans le programme seulement si MACRO est défini.

#if, #elif et #else Directive

#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 et ainsi de suite).

Les codes conditionnels sont inclus dans le programme uniquement si l’expression est évaluée à une valeur non nulle.

La directive optionnelle #else peut être utilisée avec la directive #if.

#if expression conditional codes if expression is non-zero#else conditional if expression is 0#endif

Vous pouvez également ajouter des conditionnels imbriqués à 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

#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.

. chaîne de caractères contenant le nom du fichier

Macro Valeur
__DATE__ Une chaîne de caractères contenant la date du jour
__FILE__ Une chaîne de caractères contenant le nom du fichier
__LINE__ Un entier représentant le numéro de ligne courant
__STDC__ Si suit la norme ANSI C, alors la valeur est un nombre entier non nul
__TIME__ Chaîne de caractères contenant la date actuelle.

Exemple 3 : Obtenir l’heure actuelle en utilisant __TIME__

Le programme suivant sort l’heure actuelle en utilisant la macro __TIME__.

#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

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.