Sidst opdateret: 26 Feb, 2026

Titel - .h vs .hpp: Hvad er forskellen, og hvilken skal du bruge?

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
SprogtilknytningC og C++Kun C++
Konvention eller regel?KonventionKonvention
Brug i C++‑projekterAlmindeligtForetrukket af nogle for klarhed
Skabelon‑understøttelseJaJa
Kode‑tvetydighedMulig i projekter med flere sprogMindre 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++.

Se også