Ich starte ein neues C ++ - Projekt und suche nach dem neuesten C ++ - Stil. Ich bin hier in Bezug auf die Benennung von Dateien gelandet und dachte, ich würde mitteilen, wie ich zu meiner Wahl gekommen bin. Hier geht:
Stroustrup sieht dies eher als geschäftliche als als technische Überlegung an .
Lassen Sie uns nach seinem Rat überprüfen, was die Toolchains erwarten.
Unter UNIX / Linux können Sie die folgenden Standard-GNU-Make-Regeln so interpretieren, dass sie das .cc-Dateinamensuffix bevorzugen, da .cpp- und .C-Regeln nur Aliase 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 Standardalias für 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 nicht zwischen Groß- und Kleinschreibung unterscheidet. Und es kann wichtig sein, dass Sie das beachten Visual Studio das Suffix .cpp bevorzugt
Beachten Sie beim Targeting von macOS, dass Xcode .cpp / .hpp bevorzugt (nur in Xcode 10.1 aktiviert). Sie können die Header-Vorlage jederzeit ändern, um .h zu verwenden.
Für das, was es wert ist, können Sie Ihre Entscheidung auch auf die Codebasen stützen, die Sie mögen. Google verwendet .cc und LLVM libc ++ verwendet beispielsweise .cpp.
Was ist mit Header-Dateien? Sie werden im Kontext einer C- oder C ++ - Datei kompiliert, sodass kein Compiler oder Build-System zwischen .h und .hpp unterscheiden muss. Das Hervorheben der Syntax und das automatische Einrücken durch Ihren Editor / Ihre IDE können jedoch ein Problem sein. Dies wird jedoch behoben, indem alle .h-Dateien einem C ++ - Modus zugeordnet werden. Als Beispiel lädt meine emacs-Konfiguration unter Linux alle .h-Dateien im C ++ - Modus und bearbeitet C-Header einwandfrei. Darüber hinaus können Sie beim Mischen von C und C ++ diesen Rat befolgen .
Mein persönliches Fazit : .cpp / .h ist der Weg des geringsten Widerstands.