Was ist der Unterschied zwischen hpp und hxx?

7

für gcc sollten sie gleich sein, oder? welches von ihnen ist populärer, ich bereite jetzt ein Projekt von Anfang an vor und ich möchte eins unter diesen 2 auswählen.

Danke

    
James Bond 07.12.2009, 20:24
quelle

4 Antworten

20

In C ++ spielt die Dateierweiterung keine Rolle. Die Verwendung von .h, .hpp, .hxx oder keiner Dateierweiterung erfolgt nach Konvention.

Die Standardbibliothek verwendet keine Dateierweiterung für ihre Header-Dateien. Viele Projekte, einschließlich Boost, verwenden .hpp. Viele Projekte verwenden .h. Wählen Sie einfach eine und konsistent in Ihrem Projekt.

    
James McNellis 07.12.2009, 20:26
quelle
4

Der Compiler unterscheidet nicht zwischen den beiden Erweiterungen, also ist es technisch egal, welche Sie verwenden. Persönlich verwende ich die Erweiterung .hxx für Header-Dateien, die nur intern im Projekt verwendet werden, und .hpp für diejenigen, die mit der Bibliothek / Software veröffentlicht werden sollten.

    
Dragonion 03.08.2011 18:23
quelle
2

Ich schlage vor, dass wir diese Diskussion angesichts einer kürzlichen Entdeckung, die ich gemacht habe, wieder eröffnen. In den letzten 9 Jahren habe ich die folgende Namenskonvention für die Quelldateien in meinen C- und C ++ - Projekten verwendet.

  • C = Gerader C-Quellcode, der einen oder mehrere zugehörige Einstiegspunkte enthält
  • CPP = C ++ - Quellcode, der einen oder mehrere zugehörige Einstiegspunkte enthält
  • H = Deklaration von Funktionen, Makros, Strukturen, typedefs, etc.
  • INL = Inline (Funktionskörper), die die Körper von zwei oder mehr Funktionen sind, deren Hauptdefinitionsdatei eine C- oder CPP-Datei ist, in die sie durch #include
  • eingefügt werden

Ein Beispiel für diese gemeinsamen Funktionskörper, MyStringFunctionA, die ANSI-Implementierung, ist in MyStringFunctionA.cpp definiert, während MyStringFunctionW, die Unicode-Implementierung (Wide Character), in MyStringFunctionW.cpp definiert ist. MyStringFunctionA.cpp und MyStringFunctionW.cpp enthalten den Prototyp, öffnende und schließende Klammern und Header, die UNICODE für die breite Zeichenversion unterliegen. Der Funktionskörper ist in der INI-Datei definiert, die # innerhalb des Funktionsdefinitionsblocks eingeschlossen ist.

Kombiniert mit generischen TCHAR-Mappings vereinfacht dieser Ansatz die Pflege von Unicode- und ANSI-Versionen, die beide weiterhin aktiv genutzt werden.

Diese Namenskonvention hat mit Visual Studio 6 hervorragend funktioniert. Als ich jedoch begann, meine Codebasis nach Visual Studio 2013 zu migrieren, entdeckte ich eine lästige Änderung, die zunächst verwirrend war. Obwohl alles sauber kompiliert wurde, wenn eine meiner INL-Dateien im Code-Editor geöffnet war, würde ich Dutzende von Intellisense "Fehlern" im Fehlerfenster aufgelistet sehen. Ich habe den Begriff "Fehler" zitiert, weil es sich nicht um echte Fehler handelt. Sie verschwinden, wenn die INL-Datei geschlossen wird, und die C- und CPP-Dateien, in die der iNL gezogen wird, werden ohne Fehler kompiliert, verknüpft und ordnungsgemäß ausgeführt.

    
David A. Gray 14.07.2015 05:07
quelle
0

Header-Dateierweiterungen machen normalerweise keinen Unterschied, aber ich weiß, dass in einigen Fällen die Erweiterung der .cpp-Datei einen Unterschied machen kann. Je nach Compiler kann das Front-End die Quelldatei entweder als C oder C ++ kompilieren.

Dies kann einen Unterschied machen, besonders wenn Sie die Kompilierung mit der Link-Phase kombinieren, da dies dazu führen kann, dass verschiedene Bibliotheken verknüpft werden (z. B. g ++ vs gcc) und Sie das Ergebnis in Ihrem Makefile steuern können.

    
Robert Tuck 07.12.2009 21:27
quelle

Tags und Links