Poslední aktualizace: 26 Feb, 2026

Název - .h vs .hpp: Jaký je rozdíl a který byste měli použít?

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

VlastnostSoubor .hSoubor .hpp
Jazyková asociaceC a C++Pouze C++
Konvence nebo pravidlo?KonvenceKonvence
Použití v C++ projektechBěžnéPreferováno některými pro přehlednost
Podpora šablonAnoAno
Nejasnost kóduMožná v projektech s více jazykyMé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++.

Další články