C++-codebestandsextensie? Wat is het verschil tussen .cc en .cpp [gesloten]

Ik heb gezien dat C++-code is opgeslagen als zowel .cc als .cpp-bestanden. Is er een verschil tussen de twee?

De Google-stijlgids lijkt .cc te suggereren , maar geeft geen uitleg.

Ik houd me voornamelijk bezig met programma’s op Linux-systemen.


Antwoord 1, autoriteit 100%

Uiteindelijk maakt het niet uit, omdat C++-compilers de bestanden in beide formaten kunnen verwerken. Als het een echt probleem is binnen je team, gooi dan een muntje op en ga verder met het echte werk.


Antwoord 2, autoriteit 40%

GNU GCC herkent al het volgende als C++-bestanden en zal C++-compilatie gebruiken, ongeacht of u deze via gcc of g++ aanroept: .C, .cc, .cpp, .cpp, .c++, .cp of .cxx .

Let op de .C – het geval is van belang in GCC, .C is een C-bestand terwijl .C een C++-bestand is (als u laat de compiler beslissen wat hij aan het compileren is).

GCC ondersteunt ook andere achtervoegsels om een ​​speciale behandeling aan te geven, bijvoorbeeld een .ii-bestand wordt gecompileerd als C++, maar niet voorbewerkt (bedoeld voor afzonderlijk voorverwerkte code). Alle herkende achtervoegsels worden gedetailleerd beschreven op gcc.gnu.org


Antwoord 3, autoriteit 33%

Geweldig advies over het gebruik van de makefile en andere tools. Het overwegen van niet-compilertools bij het beslissen welke extensie je moet gebruiken, is een geweldige manier om een ​​antwoord te vinden dat voor jou werkt.

Ik wilde alleen het volgende toevoegen om te helpen met wat .cc versus .cpp informatie die ik heb gevonden. De volgende extensies zijn onderverdeeld in verschillende omgevingen (uit het “C++ Primer Plus”-boek):

Unix gebruikt: .C, .cc, .cxx, .C

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

Digital Mars gebruikt: .cpp, .cxx

Borland C++ gebruikt: .cpp

Watcom gebruikt: .cpp

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

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

De verschillende omgevingen ondersteunen verschillende extensies. Ook ik was op zoek naar een antwoord op deze vraag en vond dit bericht. Op basis van dit bericht denk ik dat ik zou kunnen kiezen voor .hpp en .cpp voor het gemak van cross-platform/cross-tool herkenning.


Antwoord 4, autoriteit 10%

.cpp is voor zover ik weet de aanbevolen extensie voor C++. Sommige mensen raden zelfs aan om .hpp te gebruiken voor C++-headers, gewoon om te onderscheiden van C.

Hoewel het de compiler niet uitmaakt wat je doet, is het een persoonlijke voorkeur.


Antwoord 5, autoriteit 5%

Ik gebruik persoonlijk de extensie .cc voor implementatiebestanden, .hh voor headers en .inl voor inline/templates.

Zoals eerder gezegd, het is vooral een kwestie van smaak.

Van wat ik heb gezien, lijkt .cc meer “op open source projecten gericht” te zijn, zoals in sommige geweldige coderingsstijlen voor open source software, terwijl .cpp meer vensterachtig lijkt te zijn.

— BEWERKEN

Zoals gezegd, dit is “van wat ik heb gezien”, het kan verkeerd zijn.
Het is gewoon dat alle Windows-projecten waaraan ik heb gewerkt .cpp gebruikten, en veel open source-projecten (die voornamelijk op unix-likes zijn) gebruiken .cc.

Voorbeelden van coderingsstijlen met .cc:


Antwoord 6, autoriteit 3%

Andere gebruikte bestandsextensies zijn .cxx en .C (hoofdletter C). Ik geloof dat Bjarne Stroustrup oorspronkelijk .C gebruikte. .cpp is de naam van de C-preprocessor, dus het is jammer dat deze ook voor C++ werd gebruikt.


Antwoord 7, autoriteit 2%

De andere optie is .cxx waarbij de x een plus moet zijn, gedraaid 45 .

Windows, Mac en Linux ondersteunen allemaal .c++, dus dat moeten we gewoon gebruiken.


Antwoord 8, autoriteit 2%

Volg gewoon de conventie die wordt gebruikt door het project/team.


Antwoord 9, autoriteit 2%

Verschillende mensen die zeggen dat .cc nergens voor staat? Het zou kunnen. C++ begon als “C met klassen”.

Het is waar dat .cc en .cpp ook opdrachtnamen zijn op de meeste Unix-systemen (respectievelijk c compiler en c preprocessor).

Ik gebruik uitsluitend .cpp, maar ik ben begonnen met Windows. .cc is meer een Unix-conventie, hoewel ik het zelfs daar steeds minder zie. GNU make heeft regels voor .cpp dus dat heeft waarschijnlijk de voorkeur, het werkt standaard op zowel Windows als al het andere. Aan de andere kant gebruikt modern C++ helemaal geen extensie voor headers, daar hou ik echt niet van. Al mijn projecten gebruiken .h voor header-bestanden, en ze ondersteunen zowel C als C++ zoveel mogelijk via extern "C" en het testen van __cplusplus .


Antwoord 10

Ik heb persoonlijk nog nooit .cc gezien in een project waar ik aan heb gewerkt, maar in alle technische aspecten zal de compiler er niets om geven.

Het maakt niet uit of de ontwikkelaars aan je bron werken, dus mijn vuistregel is om te gaan met waar je team zich prettig bij voelt. Als uw “team” de open source-community is, kies dan voor iets heel gewoons, waarvan .cpp de favoriet lijkt te zijn.


Antwoord 11

Zoals bij de meeste stijlconventies, zijn er maar twee dingen die ertoe doen:

  1. Wees waar mogelijk consistent in wat je gebruikt.
  2. Ontwerp niets dat afhankelijk is van een specifieke keuze die wordt gebruikt.

Die lijken elkaar misschien tegen te spreken, maar ze hebben elk om hun eigen redenen waarde.


Antwoord 12

De .cc-extensie is nodig voor het gebruik van impliciete regels binnen makefiles. Kijk door deze links om een ​​beter begrip te krijgen van makefiles, maar kijk vooral naar de tweede, omdat deze duidelijk het nut van de .cc-extensie aangeeft:

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

Ik hoorde dit nu pas.


Antwoord 13

.C en .cc lijken standaard te zijn voor de (paar) Unix-georiënteerde C++-programma’s die ik heb gezien. Ik heb zelf altijd .cpp gebruikt, aangezien ik alleen echt met Windows werk en dat is daar sinds altijd de standaard.

Ik raad .cpp persoonlijk aan, omdat… het staat voor “C Plus Plus”. Het is natuurlijk van vitaal belang dat bestandsextensies acroniemen zijn, maar mocht deze redenering onvoldoende overtuigend blijken te zijn, dan zijn andere belangrijke zaken het niet gebruiken van de shift-toets (waardoor .C en .c++) en het vermijden van metatekens voor reguliere expressies waar mogelijk (wat .c++ uitsluit — helaas kun je de . natuurlijk niet echt vermijden.).

Dit sluit .cc niet uit, dus hoewel het nergens voor staat (of wel?) is het waarschijnlijk een goede keuze voor Linux-georiënteerde code.

p>


Antwoord 14

Ik heb respectievelijk .C en .h gebruikt voor source en header. Een leuk ding met die keuze is dat het op de opdrachtregel eenvoudig is om *.[Ch] te gebruiken om alle codebestanden te selecteren. Het gebruik van .C kan een probleem zijn op hoofdlettergevoelige bestandssystemen, maar als u foo.C en foo.C in dezelfde map hebt, verdien toch wat je krijgt 🙂


Antwoord 15

Het maakt niet uit welke van die extensies je zou gebruiken. Kies wat je leuker vindt, wees gewoon consistent met de naamgeving. De enige uitzondering die ik ken met deze naamgevingsconventie is dat ik WinDDK (of is het nu WDK?) niet kon maken om .cc bestanden. Op Linux is dat echter nauwelijks een probleem.


Antwoord 16

Ik start een nieuw C++-project en ben op zoek gegaan naar de nieuwste C++-stijl. Ik kwam hier terecht met betrekking tot bestandsnaamgeving en ik dacht dat ik zou delen hoe ik tot mijn keuze kwam. Hier gaat het:

Stroustrup ziet dit meer als een zakelijke overweging dan een technische.

Laten we zijn advies opvolgend kijken wat de toolchains verwachten.

Voor UNIX/Linux kunt u de volgende standaard GNU make-regels interpreteren als een voorkeur voor het .cc-bestandsnaamachtervoegsel, aangezien .cpp- en .C-regels slechts aliassen zijn:

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

(Opmerking: er is geen standaard COMPILE.cxx-alias)

Dus als u zich op UNIX/Linux richt, zijn zowel .cc als .cpp zeer goede opties.

Als je Windows target, zoek je naar problemen met .C, omdat het bestandssysteem niet hoofdlettergevoelig is. En het kan belangrijk voor u zijn om op te merken dat Visual Studio geeft de voorkeur aan het .cpp-achtervoegsel

Houd er bij het targeten van macOS rekening mee dat Xcode de voorkeur geeft aan .cpp/.hpp (net gecontroleerd op Xcode 10.1). Je kunt het kopsjabloon altijd wijzigen om .h te gebruiken.

Voor wat het waard is, je kunt je beslissing ook baseren op de codebases die je leuk vindt. Google gebruikt bijvoorbeeld .cc en LLVM libc++ gebruikt .cpp, bijvoorbeeld.

Hoe zit het met header-bestanden? Ze worden gecompileerd in de context van een C- of C++-bestand, dus er is geen compiler of buildsysteem nodig om .h van .hpp te onderscheiden. Syntaxisaccentuering en automatische inspringing door uw editor/IDE kunnen echter een probleem zijn, maar dit wordt opgelost door alle .h-bestanden aan een C++-modus te koppelen. Mijn emacs-configuratie op Linux laadt bijvoorbeeld alle .h-bestanden in C++-modus en bewerkt de C-headers prima. Verder kun je bij het mixen van C en C++ dit advies volgen.

Mijn persoonlijke conclusie: .cpp/.h is de weg van de minste weerstand.


Antwoord 17

Zoals anderen voor mij schreven, is het uiteindelijk wat je project/team/bedrijf gebruikt.

Persoonlijk gebruik ik de extensie cc niet, ik probeer het aantal extensies te verlagen en niet te vergroten, tenzij er een duidelijke waarde is (naar mijn mening).

Voor wat het waard is, dit is wat ik gebruik:

c – Alleen pure C-code, geen klassen of structs met methoden.

cpp – C++-code

hpp – Code alleen voor kopteksten. Implementaties staan ​​in de headers (zoals sjabloonklassen)

h – header-bestanden voor zowel C/C++. Ik ben het ermee eens dat er nog een onderscheid kan worden gemaakt, maar zoals ik schreef, probeer ik het aantal extensies voor de eenvoud te verlagen. In ieder geval van de C++-projecten waar ik aan heb gewerkt, zijn h-bestanden voor pure-C zeldzamer, daarom wilde ik geen nieuwe extensie toevoegen.

LEAVE A REPLY

Please enter your comment!
Please enter your name here

fourteen + 3 =

Other episodes