Comment utiliser le préprocesseur C
Le préprocesseur est un outil qui nous aide beaucoup lors de la programmation avec C. Il fait partie du C Standard, tout comme le langage, le compilateur et la bibliothèque standard.
Il analyse notre programme et s'assure que le compilateur obtient tout ce dont il a besoin avant de poursuivre le processus.
Que fait-il, en pratique?
Par exemple, il recherche tous les fichiers d'en-tête que vous incluez avec le#include
directif.
Il examine également chaque constante que vous avez définie à l'aide de#define
et le remplace par sa valeur réelle.
Ce n'est que le début, et j'ai mentionné ces 2 opérations car ce sont les plus courantes. Le préprocesseur peut faire beaucoup plus.
As-tu remarqué#include
et#define
avoir un#
au début? C'est commun à toutes les directives de préprocesseur. Si une ligne commence par#
, c'est pris en charge par le préprocesseur.
Conditionnels
Une des choses que nous pouvons faire est d'utiliser des conditions pour changer la façon dont notre programme sera compilé, en fonction de la valeur d'une expression.
Par exemple, nous pouvons vérifier si leDEBUG
constante est 0:
#include <stdio.h>
const int DEBUG = 0;
int main(void) {
#if DEBUG == 0
printf(“I am NOT debugging\n”);
#else
printf(“I am debugging\n”);
#endif
}
Constantes symboliques
On peut définir unconstante symbolique:
#define VALUE 1
#define PI 3.14
#define NAME "Flavio"
Lorsque nous utilisons NAME ou PI ou VALUE dans notre programme, le préprocesseur remplace son nom par la valeur, avant d'exécuter le programme.
Les constantes symboliques sont très utiles car nous pouvons donner des noms aux valeurs sans créer de variables au moment de la compilation.
Macros
Avec#define
on peut aussi définir unmacro. La différence entre une macro et une constante symbolique est qu'une macro peut accepter un argument et contient généralement du code, tandis qu'une constante symbolique est une valeur:
#define POWER(x) ((x) * (x))
Notez les parenthèses autour des arguments, une bonne pratique pour éviter les problèmes lorsque la macro est remplacée dans le processus de précompilation.
Ensuite, nous pouvons l'utiliser dans notre code comme ceci:
printf("%u\n", POWER(4)); //16
La grande différence avec les fonctions est que les macros ne spécifient pas le type de leurs arguments ou de leurs valeurs de retour, ce qui peut être pratique dans certains cas.
Si défini
On peut vérifier si une constante symbolique ou une macro est définie en utilisant#ifdef
:
#include <stdio.h>
#define VALUE 1
int main(void) {
#ifdef VALUE
printf("Value is defined\n");
#else
printf("Value is not defined\n");
#endif
}
Nous avons aussi#ifndef
pour vérifier le contraire (macro non définie).
Nous pouvons également utiliser#if defined
et#if !defined
faire la même tâche.
Il est courant d'envelopper un bloc de code dans un bloc comme celui-ci:
#if 0
#endif
pour l'empêcher temporairement de s'exécuter ou pour utiliser une constante symbolique DEBUG:
#define DEBUG 0
#if DEBUG
//code only sent to the compiler
//if DEBUG is not 0
#endif
Constantes symboliques prédéfinies que vous pouvez utiliser
Le préprocesseur définit également un certain nombre de constantes symboliques que vous pouvez utiliser, identifiées par les 2 traits de soulignement avant et après le nom, notamment:
__LINE__
se traduit par la ligne courante dans le fichier de code source__FILE__
se traduit par le nom du fichier__DATE__
se traduit par la date de compilation, dans leMmm gg aaaa
format__TIME__
se traduit par le temps de compilation, dans lehh:mm:ss
format
Téléchargez mon gratuitManuel C
Plus de tutoriels clang:
- Introduction au langage de programmation C
- C Variables et types
- Constantes C
- Opérateurs C
- C Conditionnels
- Comment travailler avec des boucles en C
- Introduction aux tableaux C
- Comment déterminer la longueur d'un tableau en C
- Introduction aux chaînes C
- Comment trouver la longueur d'une chaîne en C
- Introduction aux pointeurs C
- Boucle à travers un tableau avec C
- Booléens en C
- Introduction aux fonctions C
- Comment utiliser NULL en C
- Concepts d'E / S de base en C
- Guillemets doubles vs guillemets simples en C
- Comment renvoyer une chaîne à partir d'une fonction C
- Comment résoudre l'avertissement de fonction de bibliothèque déclarant implicitement dans C
- Comment vérifier une valeur de caractère en C
- Comment imprimer le caractère de pourcentage en utilisant `printf ()` en C
- Spécificateurs et modificateurs de conversion C
- Comment accéder aux paramètres de ligne de commande en C
- Portée des variables en C
- Pouvez-vous imbriquer des fonctions dans C?
- Variables statiques en C
- Variables globales C
- Le mot-clé typedef en C
- C Types énumérés
- Structures C
- Fichiers d'en-tête C
- Le préprocesseur C