10.1. Fabrication du programme : compilation (préprocesseur)

Icône de l'outil pédagogique Fabrication du programme : compilation (préprocesseur),

 

 

Le Langage C offre la possibilité de répartir les différents éléments d'un programme dans plusieurs fichiers sources, qui portent l'extension .c ou .cpp, et parfois .h (Header). Ces fichiers sources sont écrits au cours de la phase d'édition à l'aide d'un éditeur de texte, le plus souvent celui de l’IDE (Integrate Development Environment).

Les fichiers sources sont compilés séparément pour donner autant de fichiers objets. Ce travail est réalisé par le compilateur C (Compiler).

Celui‐ci est automatiquement précédé par l'exécution d'un programme appelé préprocesseur, dont le rôle est de traduire les directives figurant dans les fichiers sources. Ces directives sont des ordres destinés au préprocesseur, qui commencent toujours par # : les directives les plus fréquentes sont #defineinclude ou #.
Le préprocesseur fournit au compilateur des fichiers qui sont encore écrits en Langage C.

A l'issue de la compilation de chaque fichier source, le texte C a été traduit en langage machine pour donner un fichier objet d'extension .obj (sur PC). Le programme comporte à présent autant de fichiers objets qu'il avait de fichiers sources. Mais il « manque encore des bouts » pour que l'exécutable soit complet.

Les différents modules objets sont réunis en un seul module exécutable par l'éditeur de liens (Linker), à qui on fournit la liste des fichiers objets à assembler ; cette liste est contenue dans le projet. L'éditeur de liens complète les modules objets de l'utilisateur en allant chercher dans la bibliothèque standard du C ou les bibliothèques de l’IDE les blocs qui correspondent aux fonctions utilisées (printf, scanf, sin, exp, ...).

Le résultat de l'édition de liens est un programme exécutable, écrit en langage machine et autonome, qui est stocké sous la forme d'un fichier d'extension .exe (sur PC).

La bibliothèque standard du Langage C et les bibliothèques supplémentaires spécifiques de l’IDE fournissent
deux types de fichiers :

– des fichiers en‐tête tels que stdio.h, math.h, etc. Ce sont des fichiers sources qu'on peut consulter et qui contiennent des prototypes des fonction (ex. printf), des macro‐instructions (ex. getchar), des constantes symboliques (ex. NULL, M_PI)... Ces fichiers sont utilisés par le préprocesseur pour compléter les fichiers sources écrits par l'utilisateur : le préprocesseur remplace littéralement la directive #include <fic.h> par le texte contenu dans le fichier fic.h.

– des modules objets qui contiennent le code machine correspondant aux fonctions de la bibliothèque (printf, scanf, log, sqrt,etc.), dont les prototypes sont donnés dans les fichiers en‐tête .h. Ces modules objets sont utilisés par l'éditeur de liens pour l'élaboration de l’exécutable.