Ich beginne ein neues C++-Projekt und bin auf der Suche nach dem neuesten C++-Stil. Ich bin hier gelandet, als es um die Benennung von Dateien ging, und ich dachte, ich würde Ihnen mitteilen, wie ich zu meiner Wahl gekommen bin. So geht's:
Stroustrup sieht dies eher als eher eine geschäftliche als eine technische Überlegung .
Folgen wir seinem Rat und prüfen wir, was die Toolchains erwarten.
Für UNIX/Linux können Sie die folgenden Standard-GNU-Make-Regeln so interpretieren, dass sie die .cc-Dateinamensendung bevorzugen, da die .cpp- und .C-Regeln nur Aliasnamen sind:
$ make -p | egrep COMPILE[^=]+=
COMPILE.cc = $(CXX) $(CXXFLAGS) $(CPPFLAGS) $(TARGET_ARCH) -c
COMPILE.cpp = $(COMPILE.cc)
COMPILE.C = $(COMPILE.cc)
(Hinweis: Es gibt keinen Standard-Alias COMPILE.cxx)
Wenn Sie also auf UNIX/Linux abzielen, sind sowohl .cc als auch .cpp sehr gute Optionen.
Wenn Sie auf Windows abzielen, suchen Sie nach Problemen mit .C, da das Dateisystem Groß- und Kleinschreibung nicht berücksichtigt. Und es könnte wichtig sein, zu beachten, dass Visual Studio bevorzugt die Endung .cpp
Wenn Sie auf macOS zielen, beachten Sie, dass Xcode .cpp/.hpp bevorzugt (gerade auf Xcode 10.1 überprüft). Sie können die Header-Vorlage jederzeit ändern, um .h zu verwenden.
Sie können sich bei Ihrer Entscheidung auch auf die von Ihnen bevorzugten Codebasen stützen. Google verwendet .cc und LLVM libc++ verwendet zum Beispiel .cpp.
Was ist mit Header-Dateien? Sie werden im Kontext einer C- oder C++-Datei kompiliert, so dass kein Compiler oder Build-System zwischen .h und .hpp unterscheiden muss. Die Syntaxhervorhebung und die automatische Einrückung durch Ihren Editor/IDE können jedoch ein Problem darstellen, aber das lässt sich beheben, indem alle .h-Dateien mit einem C++-Modus verknüpft werden. Meine emacs-Konfiguration unter Linux lädt zum Beispiel alle .h-Dateien im C++-Modus und bearbeitet C-Header problemlos. Darüber hinaus können Sie beim Mischen von C und C++ folgendermaßen vorgehen Beratung .
Mein persönliches Fazit : .cpp/.h ist der Weg des geringsten Widerstands.
145 Stimmen
Schlussfolgerung Das spielt keine Rolle. Mögliche Herkunft cc = C mit Klassen, cpp = C plus plus
11 Stimmen
Das ist wichtig für Clang++. Wenn Sie ihm eine C++-Header-Datei mit einem Namen geben, der auf .h endet, warnt clang++ Sie.
7 Stimmen
Ein weiteres Werkzeug, das sich ein wenig kümmert, ist emacs. Mit einer sauberen .emacs-Konfiguration aktiviert das Öffnen ("Finden" in der emacs-Sprache) einer .h-Datei den c-Modus, nicht den c++-Modus. Natürlich können Sie emacs so konfigurieren, dass er etwas anderes macht (wie alles in emacs), aber ich will damit sagen, dass der c-Modus die Standardeinstellung ist.
9 Stimmen
lint
Sorgen,.C
ist C++ und.c
ist C ohne jegliches Verständnis für.cc
o.cpp
. Zumindest unter AIX 6.1.20 Stimmen
Die Antwort "Das spielt keine Rolle" ist nicht wirklich hilfreich. Die Frage ist durchaus relevant. Der Auftraggeber suchte nach einer soliden Konvention, an die er sich halten kann. Eine bessere Antwort wäre: "Leider gibt es in der C++-Gemeinschaft keine feste Konvention zu diesem Thema". Es ist traurig, wenn man darüber nachdenkt. Alle anderen gängigen Sprachen scheinen eine einzige, eindeutige Dateierweiterung zu haben. Ich würde mich an das halten, was ein wichtiges Projekt verwendet, wie gcc. Sie verwenden
.cc
.4 Stimmen
.cc ist sehr verwirrend, da
cc
ist ein sehr gebräuchlicher Name für dieC
Kompilator.0 Stimmen
Auch .cxx in einigen Implementierungen.
1 Stimmen
Ich mag das Akronym CPP nicht, da es mit dem C-Präprozessor kollidiert.
1 Stimmen
Bjarne Stroustrup, der C++ entwickelt hat, bevorzugt CPP in seinem sehr berühmten Buch: "The C++ Programming Language" ab Seite 67 und so weiter.