Poslední aktualizace: 26 Feb, 2026

Když píšete programy v C++, zejména ve velkých projektech, je organizace kódu do více souborů nezbytná pro čitelnost a údržbu. To obvykle zahrnuje používání hlavičkových souborů, které mají přípony .h nebo .hpp. Jaký je ale rozdíl mezi těmito dvěma a kterou byste měli použít?
V tomto článku rozebráme rozdíly mezi soubory .h a .hpp, prozkoumáme jejich historii a poskytneme doporučení pro osvědčené postupy.
Porozumění hlavičkovým souborům v C++
Hlavičkové soubory obsahují deklarace funkcí, tříd, konstant a maker, které můžete zahrnout do více zdrojových souborů. Tyto soubory jsou následně zahrnuty do souborů .cpp (C++ zdroj) pomocí direktivy #include.
Běžný obsah hlavičkových souborů
- Definice tříd
- Deklarace funkcí
- Definice konstant
- Makra
- Šablony (v některých případech)
.h soubory
Co je .h soubor?
Soubory .h jsou tradiční hlavičkové soubory a poprvé byly široce používány v programovacím jazyce C. Stále se používají v projektech v C i C++ k deklaraci rozhraní.
Příklad použití:
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
Výhody:
- Universálně rozpoznatelné (používá se v C i C++).
- Vhodné pro projekty zahrnující kód v C i C++.
Nevýhody:
- Může způsobovat nejasnosti v C++ projektech, zda je soubor ve stylu C nebo C++.
.hpp soubory
Co je .hpp soubor?
Soubory .hpp jsou specifické pro C++ hlavičkové soubory. Fungují stejně jako soubory .h, ale používají se k explicitnímu označení, že hlavička je určena pro C++ kód.
Příklad použití:
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
Výhody:
- Jasně naznačuje, že soubor je určen pro C++ kód.
- Zabraňuje záměně při kombinaci C a C++.
- Užitečné v projektech s více jazyky nebo v týmech dodržujících přísné konvence pojmenování.
Nevýhody:
- Mírně méně běžné ve starších kódech.
- Není rozpoznáno některými staršími systémy, které očekávají
.h.
.h vs .hpp: Klíčové rozdíly
| Vlastnost | Soubor .h | Soubor .hpp |
|---|---|---|
| Jazyková asociace | C a C++ | Pouze C++ |
| Konvence nebo pravidlo? | Konvence | Konvence |
| Použití v C++ projektech | Běžné | Preferováno některými pro přehlednost |
| Podpora šablon | Ano | Ano |
| Nejasnost kódu | Možná v projektech s více jazyky | Méně pravděpodobná |
Osvědčené postupy při výběru mezi .h a .hpp
Zde jsou některé obecné pokyny, které vám pomohou se rozhodnout:
Použijte .h, pokud:
- Píšete kód, který musí být kompatibilní jak s C, tak s C++.
- Udržujete nebo rozšiřujete starý kód, který již používá
.h.
Použijte .hpp, pokud:
- Chcete jasně označit, že soubor je specifický pro C++.
- Pracujete v projektu pouze v C++ nebo používáte specifické funkce C++, jako jsou třídy, šablony a jmenné prostory.
Běžné struktury projektů
Příklad s .h:
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
Příklad s .hpp:
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
Obě struktury jsou platné; rozdíl spočívá hlavně v přehlednosti a preferencích týmu.
Závěr
Volba mezi .h a .hpp je převážně otázkou konvence, nikoli funkčnosti. Oba slouží stejnému účelu: deklarovat rozhraní a sdílený kód napříč více C++ zdrojovými soubory.
Nicméně pro kód specifický pro C++ může použití .hpp učinit vaše záměry jasnějšími a pomoci předejít záměně ve větších kódech—zejména v těch, které zahrnují více jazyků. V projektech s více jazyky nebo starších projektech může být stále vhodnější .h.
Hlavní poznatek:
Použijte
.hpp, pokud chcete signalizovat „toto je pouze C++ kód“ — zůstaňte u.h, pokud pracujete v prostředích, která kombinují C a C++.