Laatst bijgewerkt: 26 Feb, 2026

Titel - .h vs .hpp: Wat is het verschil en welke moet je gebruiken?

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 .h verwachten.

.h vs .hpp: Belangrijkste verschillen

Kenmerk.h‑bestand.hpp‑bestand
TaalassociatieC en C++alleen C++
Conventie of regel?ConventieConventie
Gebruik in C++‑projectenVeelvoorkomendVoorkeur van sommigen voor duidelijkheid
Template‑ondersteuningJaJa
Code‑ambiguïteitMogelijk in projecten met meerdere talenMinder 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 .h gebruikt.

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 .hpp wanneer je wilt aangeven “dit is alleen C++‑code” — blijf bij .h als je werkt in omgevingen die C en C++ combineren.

Zie ook