Ich antworte hierauf als Erinnerung, um auf meine Kommentare zu der Antwort von "user1949346" auf dieselbe OP hinzuweisen.
Wie schon viele geantwortet haben: beides ist in Ordnung. Gefolgt von der Betonung der eigenen Eindrücke.
Einleitend, wie auch in den zuvor genannten Kommentaren dargelegt, ist meine Meinung C++
Kopfzeilenerweiterungen werden vorgeschlagen als .h
wenn es eigentlich keinen Grund dagegen gibt.
Da die ISO/IEC-Dokumente diese Notation von Header-Dateien verwenden und kein String-Matching zu .hpp
sogar in ihren Sprachdokumentationen über C++
.
Aber ich versuche jetzt, einen akzeptablen Grund zu finden, warum eine der beiden Möglichkeiten in Ordnung ist, und vor allem, warum sie nicht Gegenstand der Sprache selbst ist.
Also, los geht's.
En C++
Dokumentation (ich beziehe mich hier auf die Version N3690) definiert, dass ein Header der folgenden Syntax entsprechen muss:
2.9 Kopfzeilennamen
header-name:
< h-char-sequence >
" q-char-sequence "
h-char-sequence:
h-char
h-char-sequence h-char
h-char:
any member of the source character set except new-line and >
q-char-sequence:
q-char
q-char-sequence q-char
q-char:
any member of the source character set except new-line and "
Wie wir aus diesem Teil entnehmen können, kann der Name der Header-Datei alles sein, was auch im Quellcode gültig ist. Außer, dass er '\n'
Zeichen und je nachdem, ob sie von <>
darf es nicht enthalten eine >
. Oder andersherum, wenn sie von ""
-include darf es nicht enthalten "
.
Mit anderen Worten: Wenn Sie eine Umgebung hätten, die Dateinamen wie prettyStupidIdea.>
einschließen, wie:
#include "prettyStupidIdea.>"
wäre gültig, aber:
#include <prettyStupidIdea.>>
wäre ungültig. Umgekehrt gilt das Gleiche.
Und selbst
#include <<.<>
wäre ein gültiger Name für eine einbindbare Header-Datei.
Auch dies würde mit der C++
Das wäre allerdings eine ziemlich dumme Idee.
Und das ist der Grund .hpp
ist ebenfalls gültig.
Aber das ist nicht das Ergebnis der Entscheidungen der Ausschüsse, die die Sprache gestalten!
So diskutieren Sie über die Verwendung von .hpp
ist dasselbe wie über .cc
, .mm
oder was ich sonst noch in anderen Beiträgen zu diesem Thema gelesen habe.
Ich muss zugeben, dass ich keine Ahnung habe, wo .hpp
kam von 1 aber ich würde darauf wetten, dass ein Erfinder eines Parsing-Tools, einer IDE oder etwas anderem, das mit C++
kamen auf diese Idee, um einige interne Prozesse zu optimieren oder einfach einige (wahrscheinlich sogar für sie notwendige) neue Namenskonventionen zu erfinden.
Aber es ist nicht Teil der Sprache.
Und wann immer man sich entscheidet, sie auf diese Weise zu nutzen. Sei es, weil es ihm am besten gefällt oder weil einige Anwendungen des Arbeitsablaufs es erfordern, ist es nie 2 ist eine Anforderung der Sprache. Wer also sagt, "das pp ist, weil es mit C++ verwendet wird", liegt einfach falsch in Bezug auf die Definition der Sprache.
C++ erlaubt alles, was dem vorherigen Absatz entspricht. Und wenn es etwas gibt, das der Ausschuss vorgeschlagen hat, dann ist es die Verwendung von .h
da dies die Erweiterung ist, die in allen Beispielen des ISO-Dokuments verwendet wird.
Schlussfolgerung:
Solange Sie keine Notwendigkeit sehen/fühlen, die .h
en .hpp
oder umgekehrt, sollten Sie sich die Mühe nicht machen. Denn beides wäre ein gültiger Kopfname von gleicher Qualität in Bezug auf die Norm. Und deshalb ist alles, was ERFORDERLICH Sie zu verwenden .h
o .hpp
ist eine zusätzliche Einschränkung der Norm, die sogar mit anderen zusätzlichen Einschränkungen, die nicht miteinander übereinstimmen, im Widerspruch stehen könnte. Da der Auftraggeber jedoch keine zusätzliche sprachliche Einschränkung erwähnt, ist dies die einzig richtige und zulässige Antwort auf die Frage
" *.h oder *.hpp für Ihre Klassendefinitionen " ist:
Beide sind gleichermaßen richtig und anwendbar, solange keine äußeren Beschränkungen vorliegen.
1 Soviel ich weiß, ist es offenbar der Boost-Rahmen, der das hervorgebracht hat <code>.hpp</code> Erweiterung.
2 Natürlich kann ich nicht sagen, was zukünftige Versionen mit sich bringen werden!
2 Stimmen
Inzwischen gibt es Die C++ Core Guidelines die eindeutig *.h empfehlen
1 Stimmen
@Christophe Ich würde nicht sagen, dass der Standard "eindeutig" *.h empfiehlt. Sie überlassen es den Projektkonventionen:
SF.1: Use a .cpp suffix for code files and .h for interface files if your project doesn’t already follow another convention