.h ou .hpp pour les fichiers d'en-tête C++ ? On tranche une fois pour toutes

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

.h ou .hpp pour les fichiers d'en-tête C++ ? On tranche une fois pour toutes



Si vous avez déjà programmé en C++ plus de quelques semaines, vous avez forcément rencontré cette question. Vous ouvrez un projet existant — il y a .h. Vous commencez le vôtre — une voix dans votre tête dit : « Et si .hpp était plus cool ? ». Ou l'inverse : vous êtes un fan absolu de .h, et votre collègue affirme que .hpp est la seule voie possible.



Indice : les deux options sont techniquement correctes. Le compilateur s'en fiche. Mais il y a une différence, et elle est importante pour l'organisation du code, la lisibilité et la maintenance du projet. Voyons ce qui se cache derrière ces deux extensions, et quand choisir l'une ou l'autre.



Réponse courte : quelle est la différence fondamentale ?



En résumé :



  • .h — l'extension traditionnelle pour les fichiers d'en-tête, héritée du C. Utilisée à la fois en C et en C++.
  • .hpp — une extension plus moderne qui indique clairement : « C'est du C++, pas du C ». Créée pour distinguer les en-têtes C++ de ceux du C.


Mais le diable, comme toujours, se cache dans les détails. Creusons un peu plus.



Contexte historique : d'où viennent .h et .hpp ?



Le langage C utilise .h pour ses en-têtes depuis des temps immémoriaux. Quand C++ est apparu, les programmeurs ont d'abord continué à utiliser .h — et c'est normal. La bibliothèque standard C++ (par exemple, <iostream>) a même abandonné les extensions, mais c'est une autre histoire.



L'extension .hpp est apparue en réponse au besoin de séparer le code C et C++. Imaginez : vous avez un grand projet où certains fichiers sont en C, d'autres en C++. Vous le compilez, peut-être avec différents compilateurs ou avec des drapeaux différents. Comment savoir rapidement quel en-tête correspond à quel langage ? Exactement — en regardant l'extension.



Ainsi, .hpp (de « C Plus Plus header ») est devenu un standard de facto dans la communauté pour les en-têtes purement C++, en particulier dans des bibliothèques comme Boost.



Quand utiliser .h ?



Ne vous précipitez pas pour enterrer .h. Il a ses propres atouts :



  • Compatibilité avec C. Si votre fichier d'en-tête doit être inclus à la fois dans du code C et C++ — seulement .h. Pas d'autre option.
  • Projets conservateurs. Dans les grandes bases de code où le style s'est établi au fil des ans, changer les extensions en .hpp est une douleur inutile.
  • Minimalisme. Trois caractères au lieu de quatre. Un détail, mais agréable.


Exemple : en-tête compatible C et C++



// math_utils.h#ifndef MATH_UTILS_H#define MATH_UTILS_H

#ifdef __cplusplusextern "C" {#endif

int add(int a, int b);int multiply(int a, int b);

#ifdef __cplusplus}#endif

#endif // MATH_UTILS_H


Un tel fichier peut être inclus à la fois dans un .c et un .cpp. Si vous l'aviez nommé math_utils.hpp, un programmeur C pourrait être confus : « C'est bien pour moi ? ».



Quand utiliser .hpp ?



Ici, c'est l'inverse : .hpp est le choix du programmeur C++ moderne. Surtout si :



  • Vous écrivez uniquement en C++. Pas de C dans le projet, et il n'y en aura pas.
  • Vous utilisez des templates, la STL, des exceptions. Ce sont des fonctionnalités purement C++, et l'extension .hpp le souligne.
  • Vous voulez séparer explicitement le code C++ du code C. Dans les projets mixtes, cela évite la confusion.
  • Vous suivez les pratiques modernes. Boost, Qt (partiellement), de nombreuses nouvelles bibliothèques utilisent .hpp.


Exemple : en-tête C++ typique avec une classe



// player.hpp#ifndef PLAYER_HPP#define PLAYER_HPP

#include <string>#include <vector>

class Player {public: Player(const std::string& nam

Blogs

Book Recommendations