2011-03-02 6 views
163

Doublons possibles:
*.h or *.hpp for your class definitions
Correct C++ code file extension? .cc vs .cpp.c vs .cc vs vs Cpp .hpp vs vs .h .cxx

Je pensais qu'il sert à Soit:

  • .h Les fichiers sont des fichiers d'en-tête pour C et C++, et ne contiennent généralement que des déclarations. tions.
  • .c Les fichiers sont du code source C.
  • .cpp Les fichiers sont du code source C++ (qui peut également être un code source C).

puis fichiers comme .hpp, .cc et .cxx est venu, et je me suis totalement confus ... quelle est la différence (s) entre les? Quand utilisez-vous les "nouveaux"?

+0

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

Répondre

227

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.

20

Cela n'a pas vraiment d'importance.
Si vous introduisez .c dans un compilateur C++, il sera compilé en tant que cpp, .cc/.cxx est juste une alternative à .cpp utilisé par certains compilateurs. .hpp est une tentative de distinguer les fichiers d'en-tête où il existe des différences significatives entre c et C++. Une utilisation courante est pour le .hpp d'avoir les encapsuleurs cpp ou l'espace de noms nécessaires, puis d'inclure le .h afin d'exposer une bibliothèque c à c et C++.

+0

que .cc est plus commun (mais pas "standard" par tous les moyens) sur les systèmes de type UNIX, où .cpp est plus commun sur les systèmes Windows. Au moins dans mes observations. –

+0

Je pensais que le compilateur C++ de Sun utilisait .cc mais je n'ai pas trouvé de référence. –

14

J'utilise ".hpp" pour les en-têtes C++ et ".h" pour les en-têtes de langage C. Le ".hpp" me rappelle que le fichier contient des instructions pour le langage C++ qui ne sont pas valables pour le langage C, tels que en tant que déclarations de "classe".

39

Ces extensions ne sont pas vraiment nouvelles, elles sont anciennes. :-)

Lorsque C++ était nouveau, certaines personnes voulaient avoir une extension .C++ pour les fichiers source, mais cela ne fonctionnait pas sur la plupart des systèmes de fichiers. Ils ont donc essayé quelque chose de proche, comme .cxx, ou .cpp à la place.

D'autres ont pensé au nom de la langue, et "incrémentant" .c pour obtenir .cc ou même .C dans certains cas. N'a pas attrapé autant.

Certains croyaient que si la source est .cpp, les en-têtes devraient être .hpp pour correspondre. Modérément réussi.

4

Généralement, les fichiers .c et .h sont pour le code compatible C ou C, tout le reste est C++.

Beaucoup de gens préfèrent utiliser un appariement cohérent pour les fichiers C++: .cpp avec .hpp, .cxx avec .hxx, .cc avec .hh, etc. Ma préférence personnelle est pour .cpp et .hpp.

5

Parler de l'extension .hpp, je trouve utile quand les gens sont censés savoir que ce fichier d'en-tête contient C++ un pas C, comme l'utilisation d'espaces de noms ou modèle, etc., par le moment où ils voient les fichiers, ils n'essaieront pas de le fournir à un compilateur C! Et j'aime aussi nommer les fichiers d'en-tête qui contiennent non seulement des déclarations mais aussi des implémentations, comme des fichiers .hpp.comme les fichiers d'en-tête incluant les classes de modèles. Bien que ce soit juste mon opinion et bien sûr ce n'est pas censé être vrai! :)