Historiquement, les premières extensions utilisées pour C++ étaient .c
et .h
, exactement comme pour C. Cela a causé des problèmes pratiques, en particulier les .c
qui ne permettent pas les systèmes de construction de différencier facilement C++ et les fichiers C.
Unix, sur lequel C++ a été développé, a des systèmes de fichiers sensibles à la casse. Donc, certains ont utilisé .C
pour les fichiers C++. D'autres ont utilisé .c++
, .cc
et .cxx
. .C
et .c++
ont le problème qu'ils ne sont pas disponibles sur d'autres systèmes de fichiers et leur utilisation a rapidement chuté. Les compilateurs DOS et Windows C++ ont tendance à utiliser .cpp
, et certains d'entre eux rendent le choix difficile, voire impossible, à configurer. Les considérations de portabilité ont fait ce choix le plus commun, même en dehors de MS-Windows.
têtes ont utilisé le .H
correspondant, .h++
, .hh
, .hxx
et .hpp
. Mais contrairement aux fichiers principaux, .h
reste à ce jour un choix populaire pour C++ même avec l'inconvénient qu'il ne permet pas de savoir si l'en-tête peut être inclus dans le contexte C ou non. Les en-têtes standard n'ont maintenant aucune extension.
En outre, certains utilisent .ii
, .ixx
, .ipp
, .inl
pour les en-têtes des définitions inline et .txx
, .tpp
et .tpl
pour les définitions de modèle. Ceux-ci sont soit inclus dans les en-têtes fournissant la définition, soit manuellement dans les contextes où ils sont nécessaires.
Les compilateurs et les outils ne se soucient généralement pas des extensions utilisées, mais l'utilisation d'une extension associée à C++ évite de devoir rechercher comment les configurer afin de reconnaître correctement la langue utilisée.
2017 edit: le support du module expérimental de Visual Studio reconnaît .ixx
comme extension par défaut pour les interfaces de module, clang ++ reconnaît .c++m
, .cppm
et .cxxm
dans le même but.
Je préfère '.cxx' sur' .cpp' pour la cohérence avec les conventions makefile (voir http://www.gnu.org/software/make/manual/html_node/Implicit-Variables.html) – Christoph