Langage C - Notion de préprocesseur

Décembre 2016

Définition du préprocesseur


Dans les chapitres précédents, un programme simple vous a été
présenté, il s'agit du programme suivant :

int main(void)
{

 printf("Ceci est votre premier programme");

}




Dans ce programme la fonction principale main() contient une fonction
appelée printf() qui a pour but d'afficher le message
« Ceci est votre premier programme ». En réalité le compilateur
ne connaît pas la fonction printf() bien qu'il s'agisse d'une fonction
standard du langage C. Cette fonction est effectivement stockée dans
un fichier annexe, contenant une librairie de fonctions, appelé fichier
de définition
(éventuellement fichier d'en-tête

ou fichier header), dont l'extension est .h.

Il s'agit donc de préciser au compilateur dans quel fichier se trouve
la définition de la fonction printf()...


Celle-ci se trouve dans le fichier d'en-tête appelé stdio.h.

La désignation stdio signifie Standard Input Output

(en français Entrées Sorties standard), c'est-à-dire
que ce fichier contient la définition de nombreuses fonctions permettant
l'entrée (saisie au clavier, ...) et la sortie (affichage, sortie dans un fichier, ...)
de données, dont la fonction printf() fait partie.


L'incorporation de la déclaration de la fonction printf()

se fait au moyen de l'instruction #include (que l'on place en
début de fichier) suivie des balises < et > contenant le nom de fichier contenant la définition
de la fonction. La déclaration include doit se trouver avant toute utilisation
des méthodes déclarées, sinon le compilateur générera au minimum un warning.

Le programme ci-dessus pour pouvoir être compilé doit donc s'écrire :

#include <stdio.h>

int main(void)
{

 printf("Ceci est votre premier programme");

}




Le fichier est maintenant apte à être compilé. Il existe d'autres
commandes du préprocesseur qui seront détaillées dans ce cours.



Nota


Les instructions dédiées au préprocesseur ne se terminent pas

par un point-virgule !

Phases de compilation


La compilation se fait généralement

en plusieurs phases :


  • le compilateur transforme le code source en code objet, et le sauvegarde dans un fichier objet, c'est-à-dire

qu'il traduit le fichier source en langage machine (certains compilateurs créent aussi un fichier en

assembleur, un langage proche du langage machine car possédant des fonctions
très simples, mais lisible).
  • le compilateur fait ensuite appel à un éditeur de liens (en anglais linker ou binder)

qui permet d'intégrer dans le fichier final tous les éléments annexes (fonctions ou librairies)
auquel le programme fait référence mais qui ne sont pas stockés dans le fichier source.

Puis il crée un fichier exécutable qui contient tout ce dont il a besoin pour fonctionner de façon autonome,
le fichier ainsi créé possède l'extension .exe.



Dans le cas du langage C, une phase supplémentaire apparaît, il s'agit
du traitement du fichier par le préprocesseur C, un programme permet d'inclure
dans le fichier source les éléments référencés par
les instructions situées au début du fichier source (instructions précédées
du caractère #). C'est donc le préprocesseur qui ajoutera dans le fichier
source la définition de la fonction printf() qu'il sera allé chercher
dans le fichier stdio.h grâce à l'instruction #include.


Les phases de compilation dans le cas d'un compilateur C sont donc les suivantes :



A voir également :

Ce document intitulé «  Langage C - Notion de préprocesseur  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.