Extension de fichier de code C ++? .cc vs .cpp [fermé]

599

J'ai vu du code C ++ enregistré sous forme de fichiers .ccet .cpp. Y a-t-il une différence entre les deux?

Le guide de style Google semble suggérer .cc, mais ne fournit aucune explication.

Je m'intéresse principalement aux programmes sur les systèmes Linux.

Jessica
la source
85
Conclusion Peu importe. Origine possible cc = C avec classes, cpp = C plus plus
Lazer
6
Il est important de faire sonner ++. Lorsque vous lui donnez un fichier d'en-tête C ++ avec un nom qui se termine par .h, clang ++ vous avertit.
allyourcode
4
Un autre outil qui se soucie un peu est emacs. Avec une configuration .emacs propre, en ouvrant ("trouver" dans le langage emacs) un fichier .h active le mode c, pas le mode c ++. Bien sûr, vous pouvez configurer emacs pour faire autre chose (comme avec tout dans emacs), mais mon point est que le mode c est le défaut par défaut.
allyourcode
3
lintse soucie, .Cest C ++ et .cest C sans aucune compréhension de .ccou .cpp. Au moins sur AIX 6.1.
Jesse Chisholm
5
Répondre "ça n'a pas d'importance" n'aide pas vraiment. La question est tout à fait pertinente. Le PO recherchait une convention solide à respecter. Une meilleure réponse serait: "Malheureusement, la communauté C ++ n'a pas de convention solide à ce sujet". C'est triste, si vous y réfléchissez. Toutes les autres langues populaires semblent avoir une extension de fichier unique et unique. Je m'en tiendrai à ce qu'un projet important utilise, comme gcc. Ils utilisent.cc .
Lucio Paiva

Réponses:

702

En fin de compte, cela n'a pas d'importance car les compilateurs C ++ peuvent traiter les fichiers dans l'un ou l'autre format. Si c'est un vrai problème au sein de votre équipe, lancez une pièce et passez au travail réel.

JaredPar
la source
89
Eh bien, c'est un point valable, mais cela ne répond pas à la question de l'utilisateur.
vikrantt
319
cc est plus rapide à taper
thang
50
Pourquoi est-ce la réponse acceptée? Un nouveau programmeur ne saura pas que cela n'a pas d'importance et ils méritent une réponse simple.
Robben_Ford_Fan_boy
14
La réponse n'est absolument pas suffisante pour un programmeur curieux et attentif. J'aimerais plus la réponse sur cette page car elle a des explications plus détaillées.
Novin Shahroudi
2
Quand on considère que le compilateur n'est généralement pas le seul outil impliqué - presque toujours, il y a "make" ou un utilitaire similaire qui se souciera des extensions que vous utilisez, pour la correspondance des règles de construction - alors cette réponse ne concerne vraiment pas le noyau préoccupations de la question. Notez qu'il existe des variations par système et par chaîne d'outils (y compris vos règles de fabrication préférées, etc.) qui auront un impact sur la décision. Par exemple, le système de construction multi-cible récursif par défaut dont certains dans la série de plates-formes de développement QNX 6 ne récupèrent pas les fichiers * .cpp en tant que sources de langage C ++; it wants .cc
JoGusto
296

GNU GCC reconnaît tous les éléments suivants sous forme de fichiers C ++, et utilisera C ++ compilation peu importe si vous l' invoquons par gcc ou g ++: .C, .cc, .cpp, .CPP, .c++, .cpou .cxx.

Notez que .C- le cas est important dans GCC, .cc'est un fichier C alors que .Cc'est un fichier C ++ (si vous laissez le compilateur décider de ce qu'il compile).

GCC prend également en charge d'autres suffixes pour indiquer une gestion spéciale, par exemple un .iifichier sera compilé en C ++, mais pas prétraité (destiné au code prétraité séparément). Tous les suffixes reconnus sont détaillés sur gcc.gnu.org

Clifford
la source
5
"la casse compte dans GCC" - Qu'en est-il de Windows (car il ne respecte pas la casse)?
Devesh Khandelwal
17
@Devesh: Windows aussi. Mais le système d'exploitation vous empêchera d'avoir deux fichiers dans un dossier distingués uniquement par cas.
Clifford
23
@DeveshKhandelwal Mais cela préserve la
casse
229

De bons conseils sur l'utilisation du makefile et d'autres outils, en tenant compte des outils non compilateurs tout en décidant quelle extension utiliser est une excellente approche pour aider à trouver une réponse qui vous convient.

Je voulais juste ajouter ce qui suit pour aider avec certaines informations .ccvs .cppque j'ai trouvées. Les extensions suivantes sont décomposées par différents environnements (du livre "C ++ Primer Plus"):

Utilisations Unix: .C, .cc, .cxx,.c

GNU C ++ utilise: .C, .cc, .cxx, .cpp,.c++

Mars: utilisations numériques .cpp,.cxx

Borland C ++ utilise: .cpp

Watcom utilise: .cpp

Microsoft Visual C ++ utilise: .cpp, .cxx,.cc

Utilisations: CodeWarrior Metrowerks .cpp, .cp, .cc, .cxx,.c++

Les différents environnements prennent en charge différentes extensions. Moi aussi, je cherchais à répondre à cette question et j'ai trouvé ce message. Sur la base de ce post, je pense que je pourrais aller avec .hppet .cpppour faciliter la reconnaissance multi-plateforme / multi-outil.

John S.
la source
5
Cette réponse est la plus proche que les autres en essayant vraiment de s'attaquer à la question présentée, qui concerne quelqu'un qui cherche une convention solide à respecter. D'autres langues ont cela, mais en ce qui concerne l'extension de fichier, C ++ semble en manquer.
Lucio Paiva
6
Dans quel sens Unix n'utilise- .cppt-il pas ?
Keith Thompson
vc ++ 6.0 ne prend pas en charge le fichier .cc.
xus
@KeithThompson cehck réponse de l'utilisateur user181548
Spyros Mourelatos
@SpyrosMourelatos Oui, mais c'est toujours le cas que le code C ++ sur les systèmes de type Unix utilise très couramment .cpppour les fichiers source C ++. (La réponse citée note que "cpp" est l'abréviation du préprocesseur C.)
Keith Thompson
79

.cppest l'extension recommandée pour C ++ pour autant que je sache. Certaines personnes recommandent même d'utiliser .hpppour les en-têtes C ++, juste pour faire la différence avec C.

Bien que le compilateur ne se soucie pas de ce que vous faites, c'est une préférence personnelle.

Ryu
la source
60
J'ai décidé de passer de l'utilisation de .h à l'utilisation de .hpp pour les en-têtes c ++; principalement parce que d'autres outils comme les éditeurs doivent également être informés - De plus, lorsque vous utilisez des en-têtes précompilés avec gcc, il utilise par défaut C pour les fichiers .h et C ++ pour les fichiers .hpp, sauf si vous utilisez l'option '-x c ++ - header' lors de la précompilation un fichier .h.
jdkoftinoff
5
@jd. D'accord. Cela rend les outils automatisés un peu plus faciles si les fichiers h / c se transforment en fichiers hpp / cpp.
Paul Nathan
4
g ++ ne reconnaît pas .hpp comme un en-tête C ++ (pour la précompilation d'en-tête) mais .hh il le fait. Pour cette raison, j'ai fini par utiliser .cc / .hh sur .cpp / .hpp car il n'y a vraiment pas de vraie différence.
Tronic
3
@CharlesAddis - Oui, j'ai dû convertir beaucoup de code qui avait "abcd.H" (l'interface c ++) et "abcd.h" (l'interface C) dans le même répertoire en "abcd.hpp" et "abcd.h "car le simple fait de faire un" svn co "ou de décompresser sur une boîte Windows ou Mac OS X (avec le système de fichiers par défaut) échouerait en raison des" noms de fichiers en double "
jdkoftinoff
37

J'utilise personnellement l' .ccextension pour les fichiers d'implémentation, les .hhen-têtes et .inlles modèles en ligne /.

Comme dit précédemment, c'est avant tout une question de goût.

D'après ce que j'ai vu , .ccsemble être plus " orienté vers les projets open source ", comme il est conseillé dans certains grands styles de codage de logiciels open source, alors que. cppsemble être plus Windowish.

--- ÉDITER

Comme mentionné, c'est "d'après ce que j'ai vu" , cela peut être faux. C'est juste que tous les projets Windows sur lesquels j'ai travaillé sont utilisés .cpp, et beaucoup de projets open source (qui sont principalement sur des likes Unix) .cc.

Exemples de styles de codage utilisant .cc:

Aurélien Vallée
la source
1
avez-vous une référence à cela? Je n'ai jamais vu OSS .cc vs Windows .cpp
bobby
6
Visual Studio crée des fichiers .cpp pour C ++. Je ne connais pas l'histoire derrière ça.
Natan Yellin
7
LLVM Coding Standard semble plaider pour .cpp / .h et mettre la -*- C++ -*-balise dans les en-têtes llvm.org/docs/CodingStandards.html ; Mozilla Coding Style suggère .cpp / .h developer.mozilla.org/en-US/docs/Mozilla/Developer_guide/… ; KDE semble utiliser .cpp / .h trop quickgit.kde.org
sastanin
19

Les autres extensions de fichier utilisées incluent .cxxet .C(C majuscule). Je crois que Bjarne Stroustrup a utilisé à l' .Corigine. .cppest le nom du préprocesseur C, il est donc regrettable qu'il ait également été utilisé pour C ++.

utilisateur181548
la source
13

L'autre option est .cxxoù le xest censé être un plus tourné de 45 °.

Windows, Mac et Linux prennent tous en charge .c++, nous devons donc simplement l'utiliser.

FigBug
la source
12

Plusieurs personnes disent que .cccela ne représente rien? C'est possible. C ++ a commencé sa vie en tant que "C avec classes".

C'est vrai .ccet ce .cppsont aussi des noms de commandes sur la plupart des systèmes Unix (compilateur c et préprocesseur c respectivement).

J'utilise .cppexclusivement, mais j'ai commencé sur Windows. .ccest plus une convention Unix, même si je la vois de moins en moins. La marque GNU a des règles .cppdonc c'est probablement préférable, cela fonctionnera par défaut sur Windows et tout le reste. D'un autre côté, le C ++ moderne n'utilise aucune extension pour les en-têtes, je n'aime vraiment pas ça. Tous mes projets utilisent .hdes fichiers d'en-tête, et ils prennent en charge autant que possible C et C ++ via extern "C"et les tests __cplusplus.

Ben Voigt
la source
2
cela ne devrait-il pas être .cwc alors? :)
Joshua
Avant que de nombreux compilateurs ne prennent en charge les espaces de noms, ils utilisaient également l'extension .h pour les en-têtes standard. Généralement, les compilateurs fournissent des versions .h obsolètes qui placent la bibliothèque dans l'espace de noms global. Cela permet la prise en charge du code hérité. J'ai lu quelque part une fois que la raison pour laquelle ils n'ont pas d'extensions .h est que la norme leur permet de ne pas être des fichiers, mais essentiellement «intégrés». Cependant, cela peut être apocryphe.
Clifford
11

Suivez simplement la convention utilisée par le projet / l'équipe.

Ben S
la source
11

Personnellement, je n'ai jamais vu .ccde projet sur lequel j'ai travaillé, mais en toute technicité, le compilateur s'en fiche.

Qui se souciera des développeurs travaillant sur votre source, donc ma règle de base est d'aller avec ce que votre équipe est à l'aise. Si votre «équipe» est la communauté open source, optez pour quelque chose de très courant, qui .cppsemble être le favori.

Toji
la source
Plusieurs projets bien connus tels que github.com/google/googletest utilisent .ccune extension de fichier pour les fichiers d'implémentation C ++
Vertexwahn
10

Comme avec la plupart des conventions de style, il n'y a que deux choses qui comptent:

  1. Soyez cohérent dans ce que vous utilisez, dans la mesure du possible.
  2. Ne concevez rien qui dépend d'un choix spécifique utilisé.

Ceux-ci peuvent sembler contradictoires, mais ils ont chacun une valeur pour leurs propres raisons.

Alan
la source
8

.Cet .ccsemblent être la norme pour les (quelques) programmes C ++ orientés Unix que j'ai vus. Je me suis toujours utilisé .cpp, car je ne travaille vraiment que sur Windows et c'est la norme depuis toujours.

Je le recommande .cpppersonnellement, car ... cela signifie "C Plus Plus". Il est bien sûr extrêmement important que les extensions de fichier soient des acronymes, mais si cette justification s'avère insuffisamment convaincante, d'autres éléments importants sont la non-utilisation de la touche Maj (qui exclut .Cet .c++) et l'évitement des métacaractères d'expression régulière lorsque cela est possible (qui exclut .c++- malheureusement, vous ne pouvez pas vraiment éviter cela .bien sûr.).

Cela n'exclut pas .cc, donc même s'il ne représente vraiment rien (ou le fait-il?), C'est probablement un bon choix pour le code orienté Linux.

veuillez me supprimer
la source
2
Mais "cpp" pourrait également signifier "préprocesseur C". En fait, le programme "cpp" sur votre système est probablement le préprocesseur C ...
Jesper
8

J'ai utilisé .C et .h pour la source et l'en-tête, respectivement. Une bonne chose avec ce choix est que, sur la ligne de commande, il est facile à utiliser *.[Ch]pour sélectionner tous les fichiers de code. L'utilisation .Cpourrait être un problème sur les systèmes de fichiers insensibles à la casse, mais si vous en avez foo.cet foo.Cdans le même répertoire, vous méritez tout de même ce que vous obtenez :)

KeithB
la source
8

L'extension .cc est nécessaire pour utiliser des règles implicites dans les makefiles. Parcourez ces liens pour mieux comprendre les makefiles, mais regardez principalement le second, car il indique clairement l'utilité de l'extension .cc:

ftp://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_2.html

https://ftp.gnu.org/old-gnu/Manuals/make-3.79.1/html_chapter/make_10.html

Je viens d'apprendre cela maintenant.

Kyle
la source
Encore une fois, ce ne sont que des .cppfichiers. Pas de soucis ! :-)
Tom Taylor
1
Il dit: «Nous vous encourageons à utiliser le suffixe« .cc »pour les fichiers source C ++ au lieu de« .C ».» Je soupçonne que c'est juste une mauvaise formulation. L'utilisation .Cpeut être problématique sur les systèmes avec des systèmes de fichiers insensibles à la casse. Je ne pense pas qu'il y ait un avantage particulier, en ce qui makeconcerne, à utiliser .ccplus .cpp, par exemple. Les makefiles fonctionnent très bien avec les .cppfichiers source C ++.
Keith Thompson
7

Peu importe laquelle de ces extensions vous utiliseriez. Choisissez ce que vous aimez le plus, soyez juste cohérent avec la dénomination. La seule exception que je connaisse avec cette convention de dénomination est que je ne pouvais pas faire WinDDK(ou est-ce WDKmaintenant?) Pour compiler des .ccfichiers. Sur Linux, ce n'est guère un problème.

Dmitry
la source
6

Je démarre un nouveau projet C ++ et j'ai commencé à chercher les dernières nouveautés dans le style C ++. Je me suis retrouvé ici en ce qui concerne la dénomination des fichiers et j'ai pensé que je partagerais comment j'ai fait mon choix. Voici:

Stroustrup considère cela plus comme une considération commerciale que technique .

En suivant ses conseils, vérifions ce que les chaînes d'outils attendent.

Pour UNIX / Linux, vous pouvez interpréter les règles de création GNU par défaut suivantes comme favorisant le suffixe du nom de fichier .cc, car les règles .cpp et .C ne sont que des alias:

$ make -p | egrep COMPILE[^=]+=
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
COMPILE.cpp = $(COMPILE.cc)
COMPILE.C = $(COMPILE.cc)

(Remarque: il n'y a pas d'alias COMPILE.cxx par défaut)

Donc, si vous ciblez UNIX / Linux, .cc et .cpp sont de très bonnes options.

Lorsque vous ciblez Windows, vous recherchez des problèmes avec .C, car son système de fichiers est insensible à la casse. Et il peut être important pour vous de noter que Visual Studio favorise le suffixe .cpp

Lorsque vous ciblez macOS, notez que Xcode préfère .cpp / .hpp (juste vérifié sur Xcode 10.1). Vous pouvez toujours modifier le modèle d'en-tête pour utiliser .h.

Pour ce que cela vaut, vous pouvez également baser votre décision sur les bases de code que vous aimez. Google utilise .cc et LLVM libc ++ utilise .cpp, par exemple.

Qu'en est-il des fichiers d'en-tête? Ils sont compilés dans le contexte d'un fichier C ou C ++, il n'y a donc pas besoin de compilateur ou de système de génération pour distinguer .h de .hpp. La mise en évidence de la syntaxe et l'indentation automatique par votre éditeur / IDE peuvent cependant être un problème, mais cela est résolu en associant tous les fichiers .h à un mode C ++. À titre d'exemple, ma configuration emacs sous Linux charge tous les fichiers .h en mode C ++ et modifie très bien les en-têtes C. Au-delà de cela, lorsque vous mélangez C et C ++, vous pouvez suivre ces conseils .

Ma conclusion personnelle : .cpp / .h est le chemin de moindre résistance.

Armorix
la source
3

Comme d'autres l'ont écrit avant moi, à la fin c'est ce qui est utilisé par votre projet / équipe / entreprise.

Personnellement, je n'utilise pas d' ccextension, j'essaie de réduire le nombre d'extensions et de ne pas les augmenter, sauf s'il y a une valeur claire (à mon avis).

Pour ce que ça vaut, voici ce que j'utilise :

c - Code C pur uniquement, pas de classes ou de structures avec des méthodes.

cpp - Code C ++

hpp- Code en-têtes uniquement. Les implémentations sont dans les en-têtes (comme les classes de modèles)

h- fichiers d'en-tête pour C / C ++. Je suis d'accord qu'une autre distinction peut être faite, mais comme je l'ai écrit, j'essaie de réduire le nombre d'extensions pour plus de simplicité. Au moins pour les projets C ++ dans lesquels j'ai travaillé, les hfichiers pour pure-C sont plus rares, donc je ne voulais pas ajouter une autre extension.

TCS
la source