Dernière mise à jour: 26 Feb, 2026

Lors de l’écriture de programmes C++, en particulier dans de grands projets, organiser votre code en plusieurs fichiers est essentiel pour la lisibilité et la maintenance. Cela implique généralement l’utilisation de fichiers d’en-tête, qui portent les extensions .h ou .hpp. Mais quelle est la différence entre ces deux, et lequel devez‑vous utiliser ?
Dans cet article, nous détaillerons les différences entre les fichiers .h et .hpp, explorerons leur histoire et proposerons des conseils sur les meilleures pratiques.
Comprendre les fichiers d’en-tête en C++
Les fichiers d’en-tête contiennent des déclarations de fonctions, classes, constantes et macros que vous pouvez inclure dans plusieurs fichiers source. Ces fichiers sont ensuite inclus dans les fichiers .cpp (source C++) à l’aide de la directive #include.
Contenu commun des fichiers d’en-tête
- Définitions de classes
- Déclarations de fonctions
- Définitions de constantes
- Macros
- Templates (dans certains cas)
Fichiers .h
Qu’est‑ce qu’un fichier .h ?
Les fichiers .h sont des fichiers d’en-tête traditionnels et ont été largement utilisés pour la première fois dans le langage de programmation C. Ils sont encore utilisés dans les projets C et C++ pour déclarer des interfaces.
Exemple d’utilisation :
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
Avantages :
- Reconnu universellement (utilisé à la fois en C et en C++).
- Adapté aux projets impliquant du code C et C++.
Inconvénients :
- Peut créer une ambiguïté dans les projets C++ quant à savoir si le fichier est de style C ou C++.
Fichiers .hpp
Qu’est‑ce qu’un fichier .hpp ?
Les fichiers .hpp sont des fichiers d’en-tête spécifiques à C++. Ils fonctionnent de la même manière que les fichiers .h mais sont utilisés pour indiquer explicitement que l’en‑tête est destiné au code C++.
Exemple d’utilisation :
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
Avantages :
- Indique clairement que le fichier est destiné au code C++.
- Évite la confusion lors du mélange de C et de C++.
- Utile dans les projets multilingues ou les équipes suivant des conventions de nommage strictes.
Inconvénients :
- Légèrement moins répandu dans les bases de code anciennes.
- Non reconnu par certains systèmes hérités qui attendent l’extension
.h.
.h vs .hpp : Principales différences
| Fonctionnalité | Fichier .h | Fichier .hpp |
|---|---|---|
| Association linguistique | C et C++ | C++ uniquement |
| Convention ou règle ? | Convention | Convention |
| Utilisation dans les projets C++ | Courante | Préférée par certains pour la clarté |
| Support des templates | Oui | Oui |
| Ambiguïté du code | Possible dans les projets multilingues | Moins probable |
Bonnes pratiques pour choisir entre .h et .hpp
Utiliser .h si :
- Vous écrivez du code qui doit être compatible à la fois avec le C et le C++.
- Vous maintenez ou étendez du code hérité qui utilise déjà
.h.
Utiliser .hpp si :
- Vous souhaitez indiquer clairement que le fichier est spécifique à C++.
- Vous travaillez sur un projet uniquement C++ ou utilisez des fonctionnalités spécifiques à C++ telles que les classes, les templates et les espaces de noms.
Structures de projet courantes
Exemple avec .h :
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
Exemple avec .hpp :
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
Les deux structures sont valides ; la différence réside principalement dans la clarté et les préférences de l’équipe.
Conclusion
Le choix entre .h et .hpp relève principalement de la convention, pas de la fonctionnalité. Les deux servent le même but : déclarer des interfaces et du code partagé entre plusieurs fichiers source C++.
Cependant, pour du code spécifique à C++, l’utilisation de .hpp peut rendre vos intentions plus claires et éviter la confusion dans de grandes bases de code—en particulier celles impliquant plusieurs langages. Pour les projets multilingues ou hérités, .h peut encore être la meilleure option.
Point clé :
Utilisez
.hpplorsque vous voulez indiquer « ceci est du code C++ uniquement » — restez avec.hsi vous travaillez dans des environnements qui combinent C et C++.