Senast uppdaterad: 26 Feb, 2026

Titel - .h vs .hpp: Vad är skillnaden och vilken bör du använda?

När du skriver C++‑program, särskilt i stora projekt, är det viktigt att organisera koden i flera filer för läsbarhet och underhåll. Detta innebär vanligtvis att man använder header‑filer, som har filändelserna .h eller .hpp. Men vad är skillnaden mellan dessa två, och vilken bör du använda?

I den här artikeln går vi igenom skillnaderna mellan .h‑ och .hpp‑filer, utforskar deras historia och ger råd om bästa praxis.

Förstå header‑filer i C++

Header‑filer innehåller deklarationer för funktioner, klasser, konstanter och makron som du kan inkludera i flera källkodsfiler. Dessa filer inkluderas sedan i .cpp‑filer (C++‑källkod) med #include‑direktivet.

Vanligt innehåll i header‑filer

  • Klassdefinitioner
  • Funktionsdeklarationer
  • Konstantdefinitioner
  • Makron
  • Mallar (i vissa fall)

.h‑filer

Vad är en .h‑fil?

.h‑filer är traditionella header‑filer och användes först i stor utsträckning i C‑programmeringsspråket. De används fortfarande i både C‑ och C++‑projekt för att deklarera gränssnitt.

Exempel på användning:

// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H

int add(int a, int b);
int subtract(int a, int b);

#endif

Fördelar:

  • Universellt igenkända (används i både C och C++).
  • Lämpliga för projekt som innehåller både C‑ och C++‑kod.

Nackdelar:

  • Kan skapa tvetydighet i C++‑projekt om filen är C‑stil eller C++‑stil.

.hpp‑filer

Vad är en .hpp‑fil?

.hpp‑filer är C++‑specifika header‑filer. De fungerar på samma sätt som .h‑filer men används för att explicit ange att headern är avsedd för C++‑kod.

Exempel på användning:

// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP

#include <vector>

std::vector<int> filter_even(const std::vector<int>& input);

#endif

Fördelar:

  • Anger tydligt att filen är avsedd för C++‑kod.
  • Undviker förvirring när C och C++ blandas.
  • Hjälpsamt i projekt med flera språk eller team som följer strikta namngivningskonventioner.

Nackdelar:

  • Något mindre vanligt i äldre kodbaser.
  • Känns inte igen av vissa äldre system som förväntar sig .h.

.h vs .hpp: Viktiga skillnader

Funktion.h‑fil.hpp‑fil
SpråkassociationC och C++Endast C++
Konvention eller regel?KonventionKonvention
Användning i C++‑projektVanligtFöredras av vissa för tydlighet
Stöd för mallarJaJa
KodambiguitetMöjlig i projekt med flera språkMindre sannolikt

Bästa praxis för att välja mellan .h och .hpp

Här är några allmänna riktlinjer för att hjälpa dig välja:

Använd .h om:

  • Du skriver kod som måste vara kompatibel med både C och C++.
  • Du underhåller eller utökar äldre kod som redan använder .h.

Använd .hpp om:

  • Du vill göra det tydligt att filen är C++‑specifik.
  • Du arbetar i ett renodlat C++‑projekt eller använder C++‑specifika funktioner som klasser, mallar och namnrymder.

Vanliga projektstrukturer

Exempel med .h:

project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp

Exempel med .hpp:

project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp

Båda strukturerna är giltiga; skillnaden ligger främst i tydlighet och teampreferenser.

Slutsats

Valet mellan .h och .hpp handlar i stor utsträckning om konvention, inte funktionalitet. Båda fyller samma syfte: att deklarera gränssnitt och delad kod över flera C++‑källfiler.

För C++‑specifik kod kan användning av .hpp göra dina avsikter tydligare och hjälpa till att undvika förvirring i större kodbaser—särskilt de som involverar flera språk. För projekt med blandade språk eller äldre kod kan .h fortfarande vara vägen att gå.

Viktig slutsats:

Använd .hpp när du vill signalera “detta är endast C++‑kod” — håll dig till .h om du arbetar i miljöer där C och C++ blandas.

Se även