Zuletzt aktualisiert: 26 Feb, 2026

Titel - .h vs .hpp: Was ist der Unterschied und welche sollte man verwenden?

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

  • Klassen­definitionen
  • 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 .h erwarten, nicht erkannt.

.h vs .hpp: Hauptunterschiede

Merkmal.h‑Datei.hpp‑Datei
SprachzuordnungC und C++Nur C++
Konvention oder Regel?KonventionKonvention
Nutzung in C++‑ProjektenÜblichVon einigen zur Klarheit bevorzugt
Template‑UnterstützungJaJa
Code‑MehrdeutigkeitMöglich in Projekten mit gemischten SprachenWeniger 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 .h verwendet.

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.

Siehe auch