Zuletzt aktualisiert: 26 Feb, 2026

Beim Schreiben von C++‑Programmen, insbesondere in großen Projekten, ist die Organisation Ihres Codes in mehrere Dateien für Lesbarkeit und Wartbarkeit unerlässlich. Dies beinhaltet in der Regel die Verwendung von Header‑Dateien, die die Erweiterungen .h oder .hpp besitzen. Aber was ist der Unterschied zwischen diesen beiden, und welche sollten Sie verwenden?
In diesem Artikel werden wir die Unterschiede zwischen .h‑ und .hpp‑Dateien erläutern, ihre Geschichte untersuchen und Empfehlungen für bewährte Vorgehensweisen geben.
Verstehen von Header‑Dateien in C++
Header‑Dateien enthalten Deklarationen für Funktionen, Klassen, Konstanten und Makros, die Sie in mehreren Quell‑Dateien einbinden können. Diese Dateien werden dann in .cpp (C++‑Quellcode)‑Dateien mittels der #include‑Direktive eingebunden.
Gemeinsame Inhalte von Header‑Dateien
- Klassendefinitionen
- Funktionsdeklarationen
- Konstantendefinitionen
- Makros
- Templates (in manchen Fällen)
.h‑Dateien
Was ist eine .h‑Datei?
.h‑Dateien sind traditionelle Header‑Dateien und wurden zuerst weit verbreitet in der Programmiersprache C eingesetzt. Sie werden weiterhin sowohl in C‑ als auch in C++‑Projekten verwendet, um Schnittstellen zu deklarieren.
Usage Example:
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
Vorteile:
- Universell erkannt (verwendet in C und C++).
- Geeignet für Projekte, die sowohl C‑ als auch C++‑Code enthalten.
Nachteile:
- Kann in C++‑Projekten Mehrdeutigkeiten darüber verursachen, ob die Datei im C‑Stil oder C++‑Stil ist.
.hpp‑Dateien
Was ist eine .hpp‑Datei?
.hpp‑Dateien sind C++‑spezifische Header‑Dateien. Sie funktionieren genauso wie .h‑Dateien, werden jedoch verwendet, um explizit anzuzeigen, dass das Header für C++‑Code gedacht ist.
Usage Example:
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
Vorteile:
- Zeigt eindeutig an, dass die Datei für C++‑Code gedacht ist.
- Vermeidet Verwirrung beim Mischen von C und C++.
- Hilfreich in Projekten mit gemischten Sprachen oder Teams, die strenge Namenskonventionen befolgen.
Nachteile:
- Etwas weniger verbreitet in älteren Codebasen.
- Wird von einigen Altsystemen, die
.herwarten, nicht erkannt.
.h vs .hpp: Hauptunterschiede
| Merkmal | .h‑Datei | .hpp‑Datei |
|---|---|---|
| Sprachzuordnung | C und C++ | Nur C++ |
| Konvention oder Regel? | Konvention | Konvention |
| Nutzung in C++‑Projekten | Üblich | Von einigen zur Klarheit bevorzugt |
| Template‑Unterstützung | Ja | Ja |
| Code‑Mehrdeutigkeit | Möglich in Projekten mit gemischten Sprachen | Weniger wahrscheinlich |
Best Practices für die Auswahl zwischen .h und .hpp
Hier sind einige allgemeine Richtlinien, die Ihnen bei der Auswahl helfen:
Verwenden Sie .h, wenn:
- Sie Code schreiben, der sowohl mit C als auch mit C++ kompatibel sein muss.
- Sie Legacy‑Code warten oder erweitern, der bereits
.hverwendet.
Verwenden Sie .hpp, wenn:
- Sie deutlich machen möchten, dass die Datei C++‑spezifisch ist.
- Sie in einem reinen C++‑Projekt arbeiten oder C++‑spezifische Features wie Klassen, Templates und Namespaces nutzen.
Gemeinsame Projektstrukturen
Beispiel mit .h:
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
Beispiel mit .hpp:
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
Beide Strukturen sind gültig; der Unterschied liegt hauptsächlich in Klarheit und Team‑Präferenzen.
Fazit
Die Wahl zwischen .h und .hpp ist größtenteils eine Frage der Konvention, nicht der Funktionalität. Beide dienen demselben Zweck: Schnittstellen und gemeinsam genutzten Code über mehrere C++‑Quellcodedateien zu deklarieren.
Für C++‑spezifischen Code kann die Verwendung von .hpp jedoch Ihre Absichten klarer machen und Verwirrungen in größeren Codebasen vermeiden – besonders in solchen, die mehrere Sprachen umfassen. Für Projekte mit gemischten Sprachen oder Legacy‑Projekte kann .h nach wie vor die richtige Wahl sein.
Wichtige Erkenntnis:
Verwenden Sie
.hpp, wenn Sie signalisieren möchten „dies ist nur C++‑Code“ – bleiben Sie bei.h, wenn Sie in Umgebungen arbeiten, die C und C++ kombinieren.