Tutoriel de programmation en C, partie 2 – Préprocesseurs

Dans la première partie de notre série de tutoriels de programmation C en cours, nous avons brièvement abordé l’étape du prétraitement. Dans ce tutoriel, nous allons en parler un peu plus en détail pour que tu en aies une idée de base avant d’apprendre d’autres aspects de la programmation C.

Le prétraitement est généralement la première étape de la compilation du programme, au cours de laquelle tout ce qui commence par un ‘#’ est traité. Prenons un exemple de code de base.

#include <stdio.h>

int main (void)
{
    printf("\n Hello World \n");
    return 0;
}

Oui, c’est le même morceau de code que nous avons utilisé dans la première partie de cette série d’articles. Ici, c’est la première ligne qui commence par un dièse ‘#’. En termes simples, la ligne ‘#include <stdio.h>’ s’assure que le contenu du fichier d’en-tête ‘stdio.h’ est inclus dans ce programme pendant la compilation.

Ce qui se passe lors de l’étape de prétraitement, c’est que cette ligne est remplacée par le contenu réel du fichier d’en-tête. Voici à quoi ressemble le code après l’étape de prétraitement :

Fichier de code C

Tu peux donc voir que tout ce qui se trouve au-dessus des quelques lignes de code que nous avons écrites (regarde en bas de la capture d’écran) est le contenu de stdio.h. Je n’entrerai pas dans les détails de la façon dont j’ai réussi à voir le code après le prétraitement, mais c’était pour te donner une idée claire de ce qui se passe pendant le prétraitement.

Pour continuer, les lignes qui incluent un fichier d’en-tête ne sont pas les seules à commencer par un dièse (#). Il y a aussi quelque chose appelé Macros qui commence aussi par #. Il est donc important d’en parler ici (du moins de leurs bases).

Une Macro n’est rien d’autre qu’un nom (généralement en majuscules) qui fait référence à un morceau de code. Les macros sont définies à l’aide de la directive ‘#define’. Voici un exemple :

#include <stdio.h>
#define PRINT_HELLO_WORLD printf("\n Hello World \n");
int main (void)
{
    PRINT_HELLO_WORLD
PRINT_HELLO_WORLD
    return 0;
}

Nous avons donc défini une macro PRINT_HELLO_WORLD avec la valeur printf(« \n Hello World \n ») ;. Maintenant, chaque fois que nous utiliserons le nom de cette macro dans le code, il sera remplacé par sa valeur pendant l’étape de prétraitement. Voici le code après le prétraitement :

C Programme Macro

Tu vois donc que les deux occurrences de la macro ont été remplacées par sa valeur lors de l’étape de prétraitement. Bien sûr, il y a plusieurs autres détails liés aux macros que tu dois connaître pour pouvoir les utiliser avec succès. Nous aborderons ces détails dans une partie de cette série de tutoriels consacrée aux macros.

Continuons, le troisième type de lignes commençant par # sont #ifdef et #endif. Elles sont utilisées pour la compilation conditionnelle. Pour te donner une idée rapide, il y a des moments où tu ne voudrais pas qu’une partie du code soit compilée en fonction d’une certaine condition, c’est dans des cas comme celui-ci que ces directives sont utilisées.

Voici un exemple :

#include <stdio.h>
#define PRINT_HELLO_WORLD printf("\n Hello World \n");

int main (void)
{
#ifdef CONDITION
    PRINT_HELLO_WORLD
#endif
    PRINT_HELLO_WORLD
    return 0;
}

Dans le code ci-dessus, puisque ‘CONDITION’ n’est défini nulle part, la première occurrence de ‘PRINT_HELLO_WORLD’ sera omise du code à l’étape du prétraitement uniquement. En voici la preuve :

Code condition

Tu peux donc voir une seule instruction printf après l’étape de prétraitement.

Conclusion

Dans ce tutoriel, nous avons abordé le prétraitement pour donner aux débutants en programmation C une idée de base de ce qui se passe pendant cette étape. Maintenant, passe à la partie 3 pour en savoir plus sur les bases de la programmation C.

Vous aimerez aussi...