C - Fichiers d'en-tête
Un fichier d'en-tête est un fichier avec l'extension .h qui contient des déclarations de fonctions C et des définitions de macros à partager entre plusieurs fichiers source. Il existe deux types de fichiers d'en-tête :les fichiers écrits par le programmeur et les fichiers fournis avec votre compilateur.
Vous demandez à utiliser un fichier d'en-tête dans votre programme en l'incluant avec la directive de prétraitement C #include , comme vous avez vu l'inclusion de stdio.h fichier d'en-tête, fourni avec votre compilateur.
Inclure un fichier d'en-tête équivaut à copier le contenu du fichier d'en-tête mais nous ne le faisons pas car cela sera sujet aux erreurs et ce n'est pas une bonne idée de copier le contenu d'un fichier d'en-tête dans les fichiers source, surtout si nous avoir plusieurs fichiers source dans un programme.
Une pratique simple dans les programmes C ou C++ consiste à conserver toutes les constantes, les macros, les variables globales à l'échelle du système et les prototypes de fonctions dans les fichiers d'en-tête et à inclure ce fichier d'en-tête partout où il est nécessaire.
Inclure la syntaxe
Les fichiers d'en-tête utilisateur et système sont inclus à l'aide de la directive de prétraitement #include . Il a les deux formes suivantes −
#include <file>
Ce formulaire est utilisé pour les fichiers d'en-tête système. Il recherche un fichier nommé 'fichier' dans une liste standard de répertoires système. Vous pouvez ajouter des répertoires à cette liste avec l'option -I lors de la compilation de votre code source.
#include "file"
Ce formulaire est utilisé pour les fichiers d'en-tête de votre propre programme. Il recherche un fichier nommé 'fichier' dans le répertoire contenant le fichier courant. Vous pouvez ajouter des répertoires à cette liste avec l'option -I lors de la compilation de votre code source.
Inclure l'opération
Le #include La directive fonctionne en demandant au préprocesseur C d'analyser le fichier spécifié en tant qu'entrée avant de continuer avec le reste du fichier source actuel. La sortie du préprocesseur contient la sortie déjà générée, suivie de la sortie résultant du fichier inclus, suivie de la sortie provenant du texte après le #include directif. Par exemple, si vous avez un fichier d'en-tête header.h comme suit −
char *test (void);
et un programme principal appelé program.c qui utilise le fichier d'en-tête, comme ceci −
int x; #include "header.h" int main (void) { puts (test ()); }
le compilateur verra le même flux de jetons que si program.c lisait.
int x; char *test (void); int main (void) { puts (test ()); }
En-têtes à usage unique
Si un fichier d'en-tête est inclus deux fois, le compilateur traitera son contenu deux fois et cela entraînera une erreur. La manière standard d'éviter cela est d'enfermer tout le contenu réel du fichier dans un conditionnel, comme ceci -
#ifndef HEADER_FILE #define HEADER_FILE the entire header file file #endif
Cette construction est communément appelée wrapper #ifndef . Lorsque l'en-tête est à nouveau inclus, la condition sera fausse, car HEADER_FILE est défini. Le préprocesseur ignorera tout le contenu du fichier et le compilateur ne le verra pas deux fois.
Inclut calculé
Parfois, il est nécessaire de sélectionner l'un des différents fichiers d'en-tête à inclure dans votre programme. Par exemple, ils peuvent spécifier des paramètres de configuration à utiliser sur différents types de systèmes d'exploitation. Vous pouvez le faire avec une série de conditions comme suit −
#if SYSTEM_1 # include "system_1.h" #elif SYSTEM_2 # include "system_2.h" #elif SYSTEM_3 ... #endif
Mais à mesure qu'il grandit, cela devient fastidieux, à la place, le préprocesseur offre la possibilité d'utiliser une macro pour le nom de l'en-tête. C'est ce qu'on appelle une inclusion calculée . Au lieu d'écrire un nom d'en-tête comme argument direct de #include , vous y mettez simplement un nom de macro −
#define SYSTEM_H "system_1.h" ... #include SYSTEM_H
SYSTEM_H sera développé et le préprocesseur recherchera system_1.h comme si le #include avait été écrit de cette façon à l'origine. SYSTEM_H peut être défini par votre Makefile avec une option -D.
Langue C