Laatst bijgewerkt: 26 Feb, 2026

Bij het schrijven van C++-programma’s, vooral in grote projecten, is het organiseren van je code in meerdere bestanden essentieel voor leesbaarheid en onderhoud. Dit gebeurt meestal met header‑bestanden, die de extensies .h of .hpp hebben. Maar wat is het verschil tussen deze twee, en welke moet je gebruiken?
In dit artikel leggen we de verschillen tussen .h en .hpp bestanden uit, onderzoeken we hun geschiedenis, en geven we advies over best practices.
Begrijpen van header‑bestanden in C++
Header‑bestanden bevatten declaraties voor functies, klassen, constanten en macro’s die je in meerdere bronbestanden kunt opnemen. Deze bestanden worden vervolgens opgenomen in .cpp (C++‑bron) bestanden met de #include‑directive.
Veelvoorkomende inhoud van header‑bestanden
- Klasse‑definities
- Functie‑declaraties
- Constante‑definities
- Macro’s
- Templates (in sommige gevallen)
.h‑bestanden
Wat is een .h‑bestand?
.h bestanden zijn traditionele header‑bestanden en werden voor het eerst veel gebruikt in de C‑programmeertaal. Ze worden nog steeds gebruikt in zowel C‑ als C++‑projecten om interfaces te declareren.
Voorbeeld van gebruik:
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
Voordelen:
- Universeel herkend (gebruikt in zowel C als C++).
- Geschikt voor projecten die zowel C‑ als C++‑code bevatten.
Nadelen:
- Kan onduidelijkheid veroorzaken in C++‑projecten over of het bestand C‑stijl of C++‑stijl is.
.hpp‑bestanden
Wat is een .hpp‑bestand?
.hpp bestanden zijn C++‑specifieke header‑bestanden. Ze functioneren hetzelfde als .h bestanden, maar worden gebruikt om expliciet aan te geven dat de header bedoeld is voor C++‑code.
Voorbeeld van gebruik:
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
Voordelen:
- Geeft duidelijk aan dat het bestand bedoeld is voor C++‑code.
- Voorkomt verwarring bij het mixen van C en C++.
- Handig in projecten met meerdere talen of teams die strikte naamgevingsconventies volgen.
Nadelen:
- Iets minder gebruikelijk in oudere codebases.
- Wordt niet herkend door sommige legacy‑systemen die
.hverwachten.
.h vs .hpp: Belangrijkste verschillen
| Kenmerk | .h‑bestand | .hpp‑bestand |
|---|---|---|
| Taalassociatie | C en C++ | alleen C++ |
| Conventie of regel? | Conventie | Conventie |
| Gebruik in C++‑projecten | Veelvoorkomend | Voorkeur van sommigen voor duidelijkheid |
| Template‑ondersteuning | Ja | Ja |
| Code‑ambiguïteit | Mogelijk in projecten met meerdere talen | Minder waarschijnlijk |
Best practices voor het kiezen tussen .h en .hpp
Gebruik .h als:
- Je code schrijft die compatibel moet zijn met zowel C als C++.
- Je legacy‑code onderhoudt of uitbreidt die al
.hgebruikt.
Gebruik .hpp als:
- Je duidelijk wilt maken dat het bestand specifiek voor C++ is.
- Je werkt aan een uitsluitend C++‑project of C++‑specifieke functies gebruikt zoals klassen, templates en namespaces.
Veelvoorkomende projectstructuren
Voorbeeld met .h:
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
Voorbeeld met .hpp:
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
Beide structuren zijn geldig; het verschil ligt voornamelijk in duidelijkheid en teamvoorkeuren.
Conclusie
De keuze tussen .h en .hpp is grotendeels een kwestie van conventie, niet van functionaliteit. Beide dienen hetzelfde doel: interfaces en gedeelde code declareren over meerdere C++‑bronbestanden.
Voor C++‑specifieke code kan het gebruik van .hpp je intenties duidelijker maken en verwarring in grotere codebases helpen voorkomen — vooral in projecten met meerdere talen. Voor projecten met gemengde talen of legacy‑projecten kan .h nog steeds de juiste keuze zijn.
Belangrijkste les:
Gebruik
.hppwanneer je wilt aangeven “dit is alleen C++‑code” — blijf bij.hals je werkt in omgevingen die C en C++ combineren.