Le préprocesseur

La compilation d’un programme se déroule en trois phases. La première est exécutée par le préprocesseur, elle vise à remplacer les directives de compilation par du texte C++ normal. La seconde est la compilation proprement dite. La troisième est l’édition de liens.

Le préprocesseur recherche dans une ligne des macros pour les transformer (voir paragraphe suivant), et des directives de compilation ; ces directives commencent par le symbole # et se terminent avec la fin de la ligne :

#directive  [paramètres]

On peut placer des espaces blancs avant et après la directive mais, contrairement au compilateur, les sauts de lignes et les commentaires ne sont pas considérés comme des blancs par le préprocesseur. Par conséquent, on ne doit pas couper une ligne de directive, ni y placer un commentaire qui pourrait poser problème. Notons qu’il ne faut pas de point-virgule en fin de ligne.

Si la directive ne tient pas sur une seule ligne, il suffit d’écrire le caractère \ juste avant le saut de ligne ; dans ce cas, la ligne courante est considérée comme la suite de la précédente, la paire \ + saut de ligne étant ignorée. Ainsi :

#define CHAINE "Ceci est une très  très longue \          chaîne de caractères"

sera considérée comme une seule ligne ; rappelons que ceci est vrai aussi du compilateur qui ignore les paires \ + saut de ligne (chapitre 1).

La directive nulle est constituée d’un symbole # seul sur une ligne ; elle est ignorée.

Nous détaillons ci-après les principales directives de compilation.

Directive d’inclusion #include

Nous avons déjà utilisé la directive d’inclusion. Elle indique au préprocesseur de remplacer la ligne courante par l’ensemble des lignes du fichier nommé en paramètre. On l’utilise essentiellement en pratique pour inclure les en-têtes de librairies (fichiers *.h), comme on le verra plus en détail dans le paragraphe sur l’éditeur de liens.

Il existe trois variantes de la directive d’inclusion, indiquant au préprocesseur comment trouver le fichier à inclure. L’écriture :

#include <fichier>

indique au préprocesseur d’aller chercher le fichier dans le ou les répertoires d’inclusion spécialement définis comme tels dans l’environnement du système ou du compilateur. On l’utilise essentiellement pour les fichiers en-têtes fournis avec le compilateur (librairies).

L’écriture :

#include "fichier"

indique au préprocesseur de chercher le fichier d’abord dans le répertoire courant, puis éventuellement dans le ou les répertoires d’inclusion. On l’utilise surtout pour les fichiers d’en-têtes faisant partie du projet courant et définis pour lui.

Dans les deux cas, on peut spécifier un chemin d’accès pour le fichier ; les écritures sont alors équivalentes.

Enfin l’écriture :

#include identificateur

provoque le remplacement de l’identificateur par la macro de ce nom ; celle-ci doit avoir été définie (voir le paragraphe sur les macros) et correspondre à un nom de fichier correct enclos entre < > ou entre guillemets " ".

Précédent Précédent Sommaire Sommaire Suivant Suivant