Welche Bedeutung hat eine .h-Datei?

7

Ich weiß, dass .h-Datei haben soll:

  • Klassendeklarationen,
  • Funktionsprototypen,
  • und externe Variablen (für globale Variablen)

Aber ist es wichtig, es zu einer .h -Datei zu machen? Ich habe versucht, meine .h -Datei in eine .c -Datei umzubenennen und sie funktioniert immer noch.

We can name our file to be anything, but we choose to name it as a .h file.

Habe ich Recht?

    
Lazer 27.01.2010, 10:56
quelle

8 Antworten

11

Die Verwendung von .h zum Benennen von Header-Dateien ist nur eine Konvention. Sie werden auch sehen (wahrscheinlich auf Unix-ähnlichen Plattformen):

  • .hpp (die Boost-Bibliothek verwendet diese)
  • .hxx (sieht aus wie h ++, wenn die + Zeichen gekippt sind - süß, oder?)
  • .H (Unix unterscheidet zwischen Groß- und Kleinschreibung, so dass Sie diese von .h-Dateien unterscheiden können)

Persönlich würde ich dringend empfehlen, bei .h zu bleiben. Verwenden Sie insbesondere nicht .H, oder Sie werden in einer Welt der Schmerzen sein, wenn Sie Ports jemals in ein Dateisystem ohne Berücksichtigung von Groß- / Kleinschreibung portieren müssen.

    
anon 27.01.2010, 11:01
quelle
13

Während die genaue Benennung eine Konvention ist, ist der Unterschied zwischen der Behandlung von Header-Dateien und Quelldateien nicht - Header-Dateien sind nicht in Objektdateien kompiliert, aber in Quelldateien enthalten (zusammen bilden Übersetzungseinheiten). Darüber hinaus können sie in mehreren Quelldateien enthalten sein, sodass mehrere Quelldateien die gleichen Definitionen verwenden. Die Semantik der Dateien kann gleich sein, aber der Compiler behandelt sie aufgrund ihrer Verwendung anders.

Was die Benennung angeht, habe ich persönlich zumindest diese gesehen - *.h , *.H (hugh), *.hpp , *.hxx , *.hh , *.inl (für normale Header, nicht nur inline Code - yuck). Gewöhnlich begleitet von einer passenden Objektdateierweiterung.

Beachten Sie, dass Header der Standardbibliothek keine Erweiterung haben - z. Zeichenfolge.

Es ist also alles eine Frage des Geschmacks und der Konventionen - was Sie #include , das wird enthalten sein.

    
Kornel Kisielewicz 27.01.2010 11:01
quelle
5

Es ist nur eine Konvention - das "h" steht für "header". Wie bei den meisten Konventionen müssen Sie jedoch einen guten Grund haben, dagegen zu verstoßen.

    
Paul R 27.01.2010 10:59
quelle
1

Der Name einer Datei sowie deren Erweiterung bedeutet für den Compiler absolut nichts. Sie können sie h.main oder irgendetwas anderes nennen. Denken Sie daran, die Includes intakt zu halten.

    
alemjerus 27.01.2010 11:01
quelle
1

Ich dachte, es könnte sich lohnen, die vorherige Antwort für Visual Studio-ähnliche IDEs zu erweitern.

Der Einfachheit halber sollten Sie Namenskonventionen verwenden, die von Ihrer Programmier-IDE erkannt werden. Die wichtigsten Regeln, die es hat, sind diejenigen, die ihm sagen, welcher Compiler für welche Dateien verwendet werden soll. Zum Beispiel wird .c als C-Code kompiliert, .cpp als C ++, .cs als C #, .rc vom Ressourcen-Compiler und so weiter.

Durch die Benennung von etwas .h oder etwas anderem, das nicht von einer der Standard-Compiler-Auswahlregeln abgedeckt wird, wird verhindert, dass eine Datei eigenständig kompiliert wird, was für Header-Dateien gewünscht ist. Wenn Sie Ihren Test der Umbenennung Ihres Headers in Visual Studio in .c versucht hätten, wäre er für Sie kompiliert worden, wenn Sie ihn nicht explizit vom Build ausgeschlossen hätten.

Möglicherweise sind in Ihrer IDE noch andere Werkzeuge verfügbar, zum Beispiel Werkzeuge zum Generieren von Klassendiagrammen, zur Quellcodeanalyse usw., und diese können auch Dateinamenskonventionen haben, mit denen Sie kompatibel bleiben sollten.

    
Permaquid 27.01.2010 12:06
quelle
0

Unsere großen Entwicklungsprojekte #include cc-Dateien aus der cc-Datei für Klassen mit Hunderten von Methoden. Ich war damit nicht einverstanden, aber es gab Gründe.

    
Alex Brown 27.01.2010 11:11
quelle
0

kompilieren und verknüpfen Sie Ihre .h und .cpp mit .obj. Dann geben Sie Ihrem Partner hh und .obj (Ihr Teil). Ihr Partner hat keine Kenntnis über den eigentlichen Code. Schließlich verschmelzen Linker alle Objekte zu einer ausführbaren Datei. .h ist ein bekannter Indikator, der dem Programmierer mitteilt, dass diese Datei keine Definition enthält. wir können .xyz verwenden, wenn die ganze Welt es akzeptiert: -)

    
Tommy 27.01.2010 11:02
quelle
0

Darüber hinaus, wenn Sie ein Makefile haben, ist es möglich, etwas zu sagen, kompilieren Sie alle Dateien, die auf .c enden, auf Objektdateien, anstatt sie einzeln zu spezifizieren. Wenn Sie beginnen, Headerdateien mit den Erweiterungen .c zu benennen, dann versucht das make-System möglicherweise, die Headerdateien in Objektdateien zu kompilieren ...

Damit getrennte * .h- und * .c-Dateien vorliegen, bleibt alles klar und deutlich, nicht nur für den Programmierer, sondern ebenso entscheidend für das make-System, den Compiler und den Linker.

    
Ben J 27.01.2010 11:38
quelle

Tags und Links