Utoljára frissítve: 26 Feb, 2026

Cím - .h vs .hpp: Mi a különbség és melyiket kellene használni?

C++ programok írásakor, különösen nagy projektek esetén, a kód több fájlba szervezése elengedhetetlen a olvashatóság és a karbantartás szempontjából. Ez általában fejlécfájlok használatát jelenti, amelyek a .h vagy a .hpp kiterjesztésekkel rendelkeznek. De mi a különbség a kettő között, és melyiket kellene használni?

Ebben a cikkben részletezzük a .h és a .hpp fájlok közti különbségeket, áttekintjük történetüket, és útmutatást adunk a legjobb gyakorlatokhoz.

A fejlécfájlok megértése C++-ban

A fejlécfájlok deklarációkat tartalmaznak függvények, osztályok, konstansok és makrók számára, amelyeket több forrásfájlba beilleszthetsz. Ezeket a fájlokat ezután a .cpp (C++ forrás) fájlokba a #include direktíva segítségével illesztik be.

A fejlécfájlok gyakori tartalma

  • Osztálydefiníciók
  • Függvénydeklarációk
  • Konstansdefiníciók
  • Makrók
  • Sablonok (bizonyos esetekben)

.h fájlok

Mi az a .h fájl?

A .h fájlok hagyományos fejlécfájlok, és először a C programozási nyelvben váltak széles körben használttá. Ma is mind a C, mind a C++ projektekben használják őket interfészek deklarálására.

Használati példa:

// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H

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

#endif

Előnyök:

  • Mindenhol elismert (használják C és C++ esetén is).
  • Alkalmas olyan projektekhez, amelyek C és C++ kódot egyaránt tartalmaznak.

Hátrányok:

  • Kavarodást okozhat C++ projektekben arról, hogy a fájl C‑stílusú vagy C++‑stílusú‑e.

.hpp fájlok

Mi az a .hpp fájl?

A .hpp fájlok C++‑specifikus fejlécfájlok. Ugyanolyan módon működnek, mint a .h fájlok, de arra kifejezetten jelzik, hogy a fejléc C++ kódra vonatkozik.

Használati példa:

// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP

#include <vector>

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

#endif

Előnyök:

  • Egyértelműen jelzi, hogy a fájl C++ kódra szolgál.
  • Elkerüli a félreértéseket C és C++ keverésekor.
  • Hasznos vegyes nyelvű projektekben vagy szigorú elnevezési konvenciókat követő csapatoknál.

Hátrányok:

  • Kissé kevésbé elterjedt régebbi kódbázisokban.
  • Nem ismeri fel néhány régi rendszer, amely .h‑t vár.

.h vs .hpp: Főbb különbségek

Jellemző.h fájl.hpp fájl
Nyelvi kapcsolódásC és C++csak C++
Konvenció vagy szabály?KonvencióKonvenció
Használat C++ projektekbenÁltalánosNéhányak által előnyben részesített a tisztaság kedvéért
Sablon támogatásIgenIgen
Kód‑ambiguitásLehetséges vegyes nyelvű projektekbenKevésbé valószínű

Legjobb gyakorlatok a .h és .hpp választásához

Az alábbiakban néhány általános irányelvet találsz, amelyek segítenek a választásban:

Használd a .h‑t, ha:

  • Kódot írsz, amelynek kompatibilisnek kell lennie mind a C, mind a C++‑al.
  • Örökölt vagy bővíted a már .h‑t használó régi kódot.

Használd a .hpp‑t, ha:

  • Szeretnéd egyértelműen jelezni, hogy a fájl C++‑specifikus.
  • Csak C++‑ból álló projektben dolgozol, vagy C++‑specifikus funkciókat használsz, mint osztályok, sablonok és névterek.

Gyakori projektstruktúrák

Példa .h‑val:

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

Példa .hpp‑val:

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

Mindkét struktúra érvényes; a különbség elsősorban a tisztaságban és a csapat preferenciáiban rejlik.

Következtetés

A .h és .hpp közötti választás nagyrészt konvenció kérdése, nem a funkcionalitásé. Mindkettő ugyanazt a célt szolgálja: interfészek és megosztott kód deklarálása több C++ forrásfájl között.

Azonban C++‑specifikus kód esetén a .hpp használata egyértelműbbé teheti a szándékot, és segíthet elkerülni a félreértéseket nagyobb kódbázisokban – különösen, ha több nyelvet érint. Vegyes nyelvű vagy örökölt projektek esetén a .h továbbra is megfelelő lehet.

Fontos tanulság:

Használd a .hpp‑t, ha jelezni szeretnéd, hogy „ez csak C++ kód”, — maradj a .h‑nél, ha olyan környezetben dolgozol, ahol C és C++ keveredik.

Lásd még