Sidst opdateret: 26 Feb, 2026

Når du skriver C++‑programmer, især i store projekter, er det vigtigt at organisere din kode i flere filer for at gøre den læsbar og vedligeholdelsesvenlig. Dette indebærer typisk brug af header‑filer, som har filendelserne .h eller .hpp. Men hvad er forskellen mellem de to, og hvilken skal du bruge?
I denne artikel gennemgår vi forskellene mellem .h og .hpp‑filer, ser på deres historie og giver vejledning i bedste praksis.
Forstå header‑filer i C++
Header‑filer indeholder deklarationer for funktioner, klasser, konstanter og makroer, som du kan inkludere i flere kildefiler. Disse filer inkluderes derefter i .cpp (C++‑kilde)‑filer med #include‑direktivet.
Almindeligt indhold i header‑filer
- Klassedefinitioner
- Funktionsdeklarationer
- Konstantdefinitioner
- Makroer
- Skabeloner (i nogle tilfælde)
.h‑filer
Hvad er en .h‑fil?
.h‑filer er traditionelle header‑filer og blev først udbredt i C‑programmeringssproget. De bruges stadig i både C‑ og C++‑projekter til at deklarere grænseflader.
Eksempel på brug:
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
Fordele:
- Universelt genkendt (bruges i både C og C++).
- Velegnet til projekter, der indeholder både C‑ og C++‑kode.
Ulemper:
- Kan skabe tvetydighed i C++‑projekter om, hvorvidt filen er C‑stil eller C++‑stil.
.hpp‑filer
Hvad er en .hpp‑fil?
.hpp‑filer er C++‑specifikke header‑filer. De fungerer på samme måde som .h‑filer, men bruges til eksplicit at angive, at headeren er beregnet til C++‑kode.
Eksempel på brug:
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
Fordele:
- Angiver tydeligt, at filen er beregnet til C++‑kode.
- Undgår forvirring, når C og C++ blandes.
- Nyttig i projekter med flere sprog eller teams, der følger strenge navnekonventioner.
Ulemper:
- Lidt mindre udbredt i ældre kodebaser.
- Ikke altid genkendt af ældre systemer, der forventer
.h.
.h vs .hpp: Vigtige forskelle
| Funktion | .h‑fil | .hpp‑fil |
|---|---|---|
| Sprogtilknytning | C og C++ | Kun C++ |
| Konvention eller regel? | Konvention | Konvention |
| Brug i C++‑projekter | Almindeligt | Foretrukket af nogle for klarhed |
| Skabelon‑understøttelse | Ja | Ja |
| Kode‑tvetydighed | Mulig i projekter med flere sprog | Mindre sandsynligt |
Bedste praksis for valg mellem .h og .hpp
Her er nogle generelle retningslinjer, der kan hjælpe dig med at vælge:
Brug .h, hvis:
- Du skriver kode, der skal være kompatibel med både C og C++.
- Du vedligeholder eller udvider ældre kode, der allerede bruger
.h.
Brug .hpp, hvis:
- Du vil gøre det tydeligt, at filen kun er til C++‑kode.
- Du arbejder i et rent C++‑projekt eller bruger C++‑specifikke funktioner som klasser, skabeloner og navnerum.
Almindelige projektstrukturer
Eksempel med .h:
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
Eksempel med .hpp:
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
Begge strukturer er gyldige; forskellen ligger primært i klarhed og teampræferencer.
Konklusion
Valget mellem .h og .hpp er i høj grad et spørgsmål om konvention, ikke funktionalitet. Begge tjener det samme formål: at deklarere grænseflader og delt kode på tværs af flere C++‑kildefiler.
Dog kan brug af .hpp i C++‑specifik kode gøre dine intentioner tydeligere og hjælpe med at undgå forvirring i større kodebaser—særligt dem, der involverer flere sprog. I projekter med blandede sprog eller ældre kode kan .h stadig være den bedste løsning.
Nøglepointer:
Brug
.hpp, når du vil signalere “dette er kun C++‑kode” — hold dig til.h, hvis du arbejder i miljøer, der blander C og C++.