H / HPP (en-tête C / C++) : fichier .h

pérenne

Fichier d'en-tête C ou C++, qui déclare des fonctions et des types sans les implémenter, à inclure dans un ou plusieurs fichiers source.

Un fichier .h (C) ou .hpp (convention plus spécifique au C++, bien que .h reste également très utilisé pour ce langage) déclare des fonctions, des types ou des constantes sans les implémenter : il annonce l’interface d’un module au reste d’un programme, tandis que l’implémentation réelle réside dans un fichier .c ou .cpp séparé.

Ce format n’a pas de signature binaire : c’est un fichier texte traité par le préprocesseur du compilateur avant la compilation proprement dite, via la directive #include qui recopie littéralement son contenu à l’endroit où elle apparaît dans le fichier source qui l’inclut.

Cette recopie littérale explique le risque classique de double inclusion : si un même en-tête est inclus indirectement plusieurs fois dans une même unité de compilation (par exemple via deux autres en-têtes qui l’incluent chacun séparément), ses déclarations apparaissent en double et provoquent une erreur de compilation. Les gardes d’inclusion, une combinaison de #ifndef/#define/#endif autour de tout le contenu du fichier, ou la directive plus moderne #pragma once, évitent ce problème en ne traitant le fichier qu’une seule fois.

La distinction entre .h et .hpp reste une convention plutôt qu’une règle imposée par un compilateur : de nombreux projets C++ continuent d’utiliser .h par habitude ou pour signaler une compatibilité voulue avec du code C, tandis que .hpp signale sans ambiguïté un en-tête utilisant des fonctionnalités propres au C++ (templates, classes) qu’un compilateur C ne saurait pas traiter.

Les bibliothèques C++ modernes tendent à privilégier des en-têtes “header-only” (l’intégralité du code dans le .hpp, sans fichier .cpp séparé), une approche qui simplifie la distribution d’une bibliothèque au prix d’un temps de compilation plus long pour chaque fichier qui l’inclut, le compilateur devant retraiter tout le contenu à chaque inclusion plutôt que de lier un seul fichier objet précompilé.

Signature binaire

Ce format n'a pas de signature binaire fiable : il ne peut pas être identifié de façon certaine par ses seuls premiers octets.

Vérifier qu'un fichier porte bien cette signature →

Questions fréquentes

Comment ouvrir un fichier .h ?

Visual Studio Code permet d'ouvrir gratuitement un fichier .h. Voir la liste complète des logiciels compatibles ci-contre.

Quel est le type MIME du format H / HPP (en-tête C / C++) ?

Le format H / HPP (en-tête C / C++) est associé aux types MIME text/x-c et text/x-c++.

Le format H / HPP (en-tête C / C++) (.h, .hpp) est-il encore utilisé aujourd'hui ?

Oui, le format H / HPP (en-tête C / C++) est pérenne : il reste activement utilisé et pris en charge par les logiciels actuels.

Peut-on ouvrir un fichier .h sur mobile, sans installer d'application ?

Oui : Visual Studio Code fonctionne directement depuis le navigateur d'un smartphone ou d'une tablette, sans application dédiée à installer.

Pourquoi le même en-tête .h inclus dans plusieurs fichiers .c provoque-t-il une erreur de redéfinition ?

Sans protection, le préprocesseur recopie littéralement le contenu de l'en-tête à chaque inclusion : si le même fichier .c inclut indirectement deux fois le même .h (via deux autres en-têtes qui l'incluent chacun), le compilateur voit deux définitions identiques et signale une erreur. Les gardes d'inclusion (`#ifndef`/`#define`/`#endif`) ou la directive `#pragma once`, plus récente, empêchent cette double inclusion en ne traitant le fichier qu'une seule fois par unité de compilation.

Un fichier .h peut-il être utilisé aussi bien en C qu'en C++ ?

Souvent oui, à condition d'éviter les constructions propres au C++ (classes, espaces de noms) si l'en-tête doit rester compatible C. Un en-tête C destiné à être inclus depuis du code C++ s'entoure généralement d'un bloc `extern "C"` conditionnel, qui indique au compilateur C++ de ne pas appliquer sa convention de nommage des symboles (name mangling) aux fonctions déclarées, pour rester compatible avec un éditeur de liens attendant des symboles C classiques.

C, C++, H : différences entre ces fichiers source et d'en-tête →

Un fichier ne s'ouvre pas : les causes possibles →

Comment savoir si un fichier est corrompu →

Sources

Dernière mise à jour :