Paskutinį kartą atnaujinta: 26 Feb, 2026

Pavadinimas – .h vs .hpp: Kuo skiriasi ir kurį naudoti?

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 susiejimasC ir C++Tik C++
Konvencija ar taisyklė?KonvencijaKonvencija
Naudojimas C++ projektuoseĮprastaKai kurių pageidaujama dėl aiškumo
Šablonų palaikymasTaipTaip
Kodo dviprasmybėGalima mišrių kalbų projektuoseMaž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++.

Susiję straipsniai