.h oder .hpp für C++-Header-Dateien? Wir klären es ein für alle Mal

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

.h oder .hpp für C++-Header-Dateien? Wir klären es ein für alle Mal



Wenn Sie jemals länger als ein paar Wochen in C++ programmiert haben, sind Sie bestimmt auf diese Frage gestoßen. Sie öffnen ein fremdes Projekt – dort steht .h. Sie beginnen Ihr eigenes – und eine Stimme in Ihrem Kopf sagt: „Vielleicht ist .hpp cooler?“. Oder umgekehrt: Sie sind ein glühender Fan von .h, während ein Kollege behauptet, dass .hpp der einzig wahre Weg sei.



Spoiler: Beide Varianten sind technisch korrekt. Dem Compiler ist es egal. Aber es gibt einen Unterschied, und dieser ist wichtig für die Code-Organisation, Lesbarkeit und Projektwartung. Lassen Sie uns klären, was hinter diesen beiden Erweiterungen steckt und wann man welche wählt.



Kurze Antwort: Was ist der grundlegende Unterschied?



Ganz kurz zusammengefasst:



  • .h – die traditionelle Erweiterung für Header-Dateien, aus C stammend. Wird sowohl in C als auch in C++ verwendet.
  • .hpp – eine modernere Erweiterung, die explizit anzeigt: „Das ist C++, nicht C“. Entwickelt, um C++-Header von C-Headern zu unterscheiden.


Aber der Teufel steckt, wie immer, im Detail. Gehen wir tiefer.



Historischer Kontext: Woher kommen .h und .hpp?



Die Sprache C verwendet .h für Header seit jeher. Als C++ aufkam, verwendeten Programmierer zunächst einfach weiter .h – und das ist völlig in Ordnung. Die C++-Standardbibliothek (z. B. <iostream>) hat sogar ganz auf Erweiterungen verzichtet, aber das ist eine andere Geschichte.



Die Erweiterung .hpp entstand als Antwort auf die Notwendigkeit, C- und C++-Code zu trennen. Stellen Sie sich vor: Sie haben ein großes Projekt, bei dem ein Teil der Dateien in C und ein Teil in C++ geschrieben ist. Sie kompilieren es möglicherweise mit verschiedenen Compilern oder mit unterschiedlichen Flags. Wie erkennen Sie schnell, welcher Header für welche Sprache ist? Richtig – durch einen Blick auf die Erweiterung.



So wurde .hpp (von „C Plus Plus header“) zum De-facto-Standard in der Community für reine C++-Header, insbesondere in Bibliotheken wie Boost.



Wann verwendet man .h?



Überstürzen Sie nicht die Abkehr von .h. Es hat seine Stärken:



  • Kompatibilität mit C. Wenn Ihre Header-Datei sowohl aus C- als auch aus C++-Code eingebunden werden soll – nur .h. Keine Alternative.
  • Konservative Projekte. In großen Codebasen, in denen sich ein Stil über Jahre etabliert hat, ist ein Wechsel zu .hpp unnötiger Aufwand.
  • Minimalismus. Drei Zeichen statt vier. Eine Kleinigkeit, aber angenehm.


Beispiel: Ein mit C und C++ kompatibler Header



// math_utils.h#ifndef MATH_UTILS_H#define MATH_UTILS_H

#ifdef __cplusplusextern "C" {#endif

int add(int a, int b);int multiply(int a, int b);

#ifdef __cplusplus}#endif

#endif // MATH_UTILS_H


Eine solche Datei kann sowohl in .c als auch in .cpp eingebunden werden. Wenn Sie sie math_utils.hpp nennen würden, könnte ein C-Programmierer verwirrt sein: „Ist das wirklich für mich?“.



Wann verwendet man .hpp?



Hier ist es genau umgekehrt: .hpp ist die Wahl des modernen C++-Programmierers. Besonders wenn:



  • Sie nur in C++ schreiben. Es gibt kein C im Projekt und wird es auch nie geben.
  • Sie Templates, STL, Exceptions verwenden. Das sind reine C++-Features, und die Erweiterung .hpp unterstreicht dies.
  • Sie C++-Code explizit von C trennen möchten. In gemischten Projekten verhindert dies Verwirrung.
  • Sie modernen Praktiken folgen. Boost, Qt (teilweise), viele neue Bibliotheken verwenden .hpp.


Beispiel: Ein typischer C++-Header mit einer Klasse



// player.hpp#ifndef PLAYER_HPP#define PLAYER_HPP

#include <string>#include <vector>

class Player {public: Player(const std::string& nam

Blogs

Buchempfehlungen