Es gibt keinen Vorteil für eine bestimmte Erweiterung, außer dass sie für Sie, den Compiler und/oder Ihre Werkzeuge eine andere Bedeutung haben kann. header.h
ist eine gültige Kopfzeile. header.hpp
ist eine gültige Kopfzeile. header.hh
ist eine gültige Kopfzeile. header.hx
ist eine gültige Kopfzeile. h.header
ist eine gültige Kopfzeile. this.is.not.a.valid.header
ist eine gültige Kopfzeile in Verweigerung. ihjkflajfajfklaf
ist eine gültige Kopfzeile. Solange der Name vom Compiler richtig geparst werden kann und das Dateisystem ihn unterstützt, ist er ein gültiger Header, und der einzige Vorteil seiner Erweiterung ist das, was man in ihn hineinliest.
Dennoch ist es wichtig, auf der Grundlage der Verlängerung genaue Annahmen treffen zu können. sehr nützlich, daher wäre es ratsam, für Ihre Headerdateien leicht verständliche Regeln zu verwenden. Ich persönlich ziehe es vor, etwas wie dies zu tun:
- Wenn es bereits festgelegte Leitlinien gibt, sollten Sie diese befolgen, um Verwirrung zu vermeiden.
- Wenn alle Quelldateien im Projekt für dieselbe Sprache sind, verwenden Sie
.h
. Es gibt keine Zweideutigkeit.
- Wenn einige Header mit mehreren Sprachen kompatibel sind, während andere nur mit einer einzigen Sprache kompatibel sind, basieren die Erweiterungen auf der restriktivsten Sprache, mit der ein Header kompatibel ist. Ein Header, der mit C oder sowohl mit C als auch mit C++ kompatibel ist, erhält
.h
, während ein Header, der mit C++, aber nicht mit C kompatibel ist, .hpp
o .hh
oder etwas in der Art.
Dies ist natürlich nur eine der viele Es gibt viele Möglichkeiten, mit Verlängerungen umzugehen, und man kann sich nicht unbedingt auf den ersten Eindruck verlassen, selbst wenn die Dinge einfach erscheinen. Ich habe zum Beispiel gesehen, dass die Verwendung von .h
für normale Kopfzeilen, und .tpp
für Header, die nur Definitionen für Memberfunktionen von Vorlagenklassen enthalten, mit .h
Dateien, die Vorlagenklassen definieren, einschließlich der .tpp
Dateien, die ihre Mitgliedsfunktionen definieren (anstelle der .h
Kopfzeile, die sowohl die Funktionsdeklaration als auch die Definition direkt enthält). Ein weiteres Beispiel ist, dass viele Leute immer die Sprache des Headers in seiner Erweiterung wiedergeben, selbst wenn es keine Möglichkeit der Mehrdeutigkeit gibt, .h
ist immer ein C-Header und .hpp
(o .hh
または .hxx
usw.) ist immer ein C++-Header. Und noch einmal, einige Leute verwenden .h
für "Header in Verbindung mit einer Quelldatei" und .hpp
für "Kopfzeile mit allen inline definierten Funktionen".
Der Hauptvorteil besteht darin, dass Sie Ihre Kopfzeilen durchgängig im gleichen Stil benennen und dass dieser Stil für jeden, der Ihren Code untersucht, leicht erkennbar ist. Auf diese Weise kann jeder, der mit Ihrem üblichen Codierungsstil vertraut ist, mit einem flüchtigen Blick feststellen, was Sie mit einer bestimmten Erweiterung meinen.
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