Paskutinį kartą atnaujinta: 26 Feb, 2026

Rašant C++ programas, ypač dideliuose projektuose, kodą organizuoti į kelis failus yra būtina skaitomumui ir priežiūrai. Tai dažniausiai reiškia antraštinių failų naudojimą, kurie turi plėtinius .h arba .hpp. Bet koks yra šių dviejų skirtumas ir kurį turėtumėte naudoti?
Šiame straipsnyje išnagrinėsime skirtumus tarp .h ir .hpp failų, jų istoriją ir pateiksime patarimų dėl geriausių praktikų.
C++ antraštinių failų supratimas
Antraštiniai failai turi deklaracijas funkcijoms, klasėms, konstantoms ir makrokomandoms, kurias galite įtraukti į kelis šaltinio failus. Šie failai tada įtraukiami į .cpp (C++ šaltinio) failus naudojant #include direktyvą.
Įprastas antraštinių failų turinys
- Klasės apibrėžimai
- Funkcijų deklaracijos
- Konstantų apibrėžimai
- Makrokomandos
- Šablonai (kai kuriais atvejais)
.h failai
Kas yra .h failas?
.h failai yra tradiciniai antraštiniai failai ir pirmiausia plačiai naudojami C programavimo kalboje. Jie vis dar naudojami tiek C, tiek C++ projektuose, kad deklaruotų sąsajas.
Naudojimo pavyzdys:
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
Privalumai:
- Universaliai atpažįstami (naudojami tiek C, tiek C++).
- Tinka projektams, kuriuose yra tiek C, tiek C++ kodas.
Trūkumai:
- Gali sukelti dviprasmybę C++ projektuose, ar failas yra C‑stiliaus, ar C++‑stiliaus.
.hpp failai
Kas yra .hpp failas?
.hpp failai yra C++‑specifiniai antraštiniai failai. Jie veikia taip pat kaip .h failai, tačiau naudojami aiškiai nurodyti, kad antraštė skirta C++ kodui.
Naudojimo pavyzdys:
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
Privalumai:
- Aiškiai nurodo, kad failas skirtas C++ kodui.
- Išvengia painiavos, kai kartu naudojami C ir C++.
- Naudingas mišrių kalbų projektuose arba komandose, laikomose griežtų pavadinimų konvencijų.
Trūkumai:
- Šiek tiek retesnis senesnėse kodo bazėse.
- Kai kurios senos sistemos, tikinčios
.h, jo neatpažįsta.
.h ir .hpp: pagrindiniai skirtumai
| Savybė | .h failas | .hpp failas |
|---|---|---|
| Kalbos susiejimas | C ir C++ | Tik C++ |
| Konvencija ar taisyklė? | Konvencija | Konvencija |
| Naudojimas C++ projektuose | Įprasta | Kai kurių pageidaujama dėl aiškumo |
| Šablonų palaikymas | Taip | Taip |
| Kodo dviprasmybė | Galima mišrių kalbų projektuose | Mažiau tikėtina |
Geriausios praktikos renkantis tarp .h ir .hpp
Naudokite .h, jei:
- Rašote kodą, kuris turi būti suderinamas tiek su C, tiek su C++.
- Prižiūrite arba plečiate seną kodą, kuriame jau naudojami
.h.
Naudokite .hpp, jei:
- Norite aiškiai parodyti, kad failas yra skirtas C++.
- Dirbate tik C++ projekte arba naudojate C++ specifines savybes, tokias kaip klasės, šablonai ir vardų erdvės.
Įprastos projekto struktūros
Pavyzdys su .h:
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
Pavyzdys su .hpp:
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
Abiejų struktūrų galiojimas yra tas pats; skirtumas daugiausia priklauso nuo aiškumo ir komandos nuostatų.
Išvada
Pasirinkimas tarp .h ir .hpp yra labiau konvencijos klausimas, o ne funkcionalumo. Abu failų tipai tarnauja tam pačiam tikslui – deklaruoti sąsajas ir bendrą kodą tarp kelių C++ šaltinio failų.
Tačiau C++‑specifiniam kodui, naudojant .hpp, galite aiškiau išreikšti savo ketinimus ir išvengti painiavos didesnėse kodo bazėse – ypač kai jose dalyvauja kelios kalbos. Mišrių kalbų ar senų projektų atveju .h vis dar gali būti tinkamas pasirinkimas.
Pagrindinė išvada:
Naudokite
.hpp, kai norite parodyti „tai tik C++ kodas“ – likite su.h, jei dirbate aplinkoje, kurioje susijungia C ir C++.