.c vs .cc vs. .cpp vs .hpp vs .h vs .cxx

Dupliqués possibles:
* .h ou * .hpp pour vos définitions de classe
Corriger l’extension du fichier de code C ++? .cc vs .cpp

Je pensais que c’était comme ça:

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

puis des fichiers comme .hpp , .cc et .cxx sont arrivés, et je me suis totalement .cxx … quelle est la différence (s) entre ceux-ci? Quand utilisez-vous les “nouveaux”?

Historiquement, les premières extensions utilisées pour C ++ étaient .c et .h , exactement comme pour C. Cela posait des problèmes pratiques, en particulier le .c qui ne permettait pas aux systèmes de construction de différencier facilement les fichiers C ++ et C.

Unix, sur lequel C ++ a été développé, possède des systèmes de fichiers sensibles à la casse. Donc, certains ont utilisé .C pour les fichiers C ++. Autre utilisé .c++ , .cc et .cxx . .C problème est que .C et .C .c++ ne sont pas disponibles sur les autres systèmes de fichiers et leur utilisation a été rapidement abandonnée. Les compilateurs DOS et Windows C ++ avaient tendance à utiliser .cpp , et certains d’entre eux rendaient le choix difficile, voire impossible, à configurer. La prise en compte de la portabilité a rendu ce choix le plus courant, même en dehors de MS-Windows.

Les en-têtes ont utilisé les .H , .h++ , .hh , .hxx et .hpp . Mais contrairement aux fichiers principaux, .h rest à ce jour un choix populaire pour C ++ même avec l’inconvénient de ne pas pouvoir savoir si l’en-tête peut être inclus dans le contexte C ou non. Les en-têtes standard n’ont plus aucune extension.

En outre, certains utilisent .ii , .ixx , .ipp , .inl pour les en-têtes fournissant des définitions .txx 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 qu’ils associent à C ++ évite d’avoir à déterminer comment les configurer pour qu’ils reconnaissent correctement la langue utilisée.

2017 edit: le support de module expérimental de Visual Studio reconnaît l’ .ixx par défaut pour les interfaces de module, clang ++ reconnaît le même .cxxm .c++m , .cppm et .cxxm .

Ces extensions ne sont pas vraiment nouvelles, elles sont anciennes. 🙂

Lorsque C ++ était nouveau, certaines personnes souhaitaient 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 pensaient que si la source était .cpp, les en-têtes devraient correspondre à .hpp. Modérément réussi.

Ça n’a vraiment pas d’importance.
Si vous alimentez un compilateur c ++ en .c, il comstackra en cpp, .cc / .cxx est juste une alternative à .cpp utilisée par certains compilateurs.

.hpp est une tentative pour distinguer les fichiers d’en-tête où il existe des différences significatives entre c et c ++. Une utilisation courante est que le fichier .hpp ait les wrappers ou les espaces de noms nécessaires pour cpp, puis inclue le .h afin d’exposer la bibliothèque ac à c et c ++.

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 valides pour le langage C, telles que les déclarations “class”.

En général, les fichiers .c et .h sont pour le code compatible C ou C, tout le rest est C ++.

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

En ce qui concerne l’extension .hpp, je trouve cela utile lorsque des personnes sont censées savoir que ce fichier d’en-tête contient C ++ et non C , comme utiliser des espaces de noms ou des modèles, au moment où ils voient les fichiers. à 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 les fichiers .hpp. comme les fichiers d’en-tête, y compris les classes de modèle. Bien que ce soit juste mon avis et bien sûr, ce n’est pas censé avoir raison! 🙂