10.5. Ecriture d'un fichier en‐tête – Exemple complet

Icône de l'outil pédagogique Ecriture d'un fichier en‐tête – Exemple complet

Reprenons l'exemple précédent pour illustrer l'utilisation du fichier en‐tête global.h créé par le programmeur.

Exemple 53 : Compilation séparée avec fichier en-tête

Fichier en-tête global.h

/* Ce fichier en‐tête contient tout ce qu'on veut rendre "public" : les constantes symboliques, les prototypes
de fonctions, les déclarations de variables globales. Mais aussi, le cas échéant, des modèles de structures
et des créations de types par typedef. Voir exemple plus complet à la fin du chapitre Structures */

Fichier 1 :

Fichier 2 : 

Cet exemple appelle certaines précisions.

1. La directive #include possède deux syntaxes :

– la syntaxe #include <...> incite le préprocesseur à chercher le fichier à inclure dans un dossier défini par l'environnement de travail (par exemple, C:\...\CVI\include). C'est la syntaxe employée pour inclure les fichiers en‐tête de la bibliothèque standard.

– la syntaxe #include "..." (guillemets au lieu de < >) indique au préprocesseur que le fichier à inclure se trouve dans le dossier de travail courant. C'est la syntaxe généralement utilisée avec les fichiers en‐tête créés par le programmeur. On peut aussi préciser le chemin complet du fichier (déconseillé !).

2. Si dans un même fichier source se trouvent simultanément la définition et la déclaration d'une variable ou d'une fonction, le compilateur ignore la déclaration pour ne tenir compte que de la définition.

3. Un fichier en‐tête d'extension .h peut contenir (dans l’ordre) :

– des constantes symboliques définies par #define, ce qui évite de répéter le #define dans tous les fichiers où la constante symbolique est employée. Plus généralement, on pourra y définir des macro‐instructions à l'aide de #define ;

– des définitions de types synonymes par typedef ;

– des modèles de structures (voir chapitre sur les structures) ;

– les déclarations des fonctions (prototypes) et des variables globales.

Par contre, un fichier en‐tête ne peut contenir aucune définition, donc aucune initialisation, ni aucun code exécutable.

Attention : les prototypes de fonction utilisent en général les types créés par le programmeur, qui eux-mêmes peuvent utiliser les constantes symboliques. L'ordre d'écriture d'un fichier en‐tête est donc le suivant : constantes symboliques, puis créations de types (modèles de structures en particulier), et enfin les prototypes des fonction et les déclarations de variables globales.