Pēdējoreiz atjaunināts: 26 Feb, 2026

Rakstot C++ programmas, īpaši lielos projektos, koda organizēšana vairākos failos ir būtiska lasāmības un uzturēšanas nodrošināšanai. Parasti tas ietver galvenes failus, kuriem ir paplašinājumi .h vai .hpp. Bet kāda ir atšķirība starp šiem diviem, un kuru vajadzētu izmantot?
Šajā rakstā mēs izklāstīsim atšķirības starp .h un .hpp failiem, izpētīsim to vēsturi un sniegsim vadlīnijas par labāko praksi.
Galvenes failu izpratne C++
Galvenes faili satur deklarācijas funkcijām, klasēm, konstantēm un makrokomandām, kuras var iekļaut vairākos avota failos. Šie faili tiek iekļauti .cpp (C++ avota) failos, izmantojot #include direktīvu.
Bieži sastopamais galvenes failu saturs
- Klases definīcijas
- Funkciju deklarācijas
- Konstantu definīcijas
- Makrokomandas
- Veidnes (dažos gadījumos)
.h faili
Kas ir .h fails?
.h faili ir tradicionāli galvenes faili un sākotnēji plaši tika izmantoti C programmēšanas valodā. Tie joprojām tiek izmantoti gan C, gan C++ projektos, lai deklarētu interfeisus.
Lietošanas piemērs:
// mathutils.h
#ifndef MATHUTILS_H
#define MATHUTILS_H
int add(int a, int b);
int subtract(int a, int b);
#endif
Priekšrocības:
- Vispār atzīts (izmanto gan C, gan C++)
- Piemērots projektiem, kas ietver gan C, gan C++ kodu.
Trūkumi:
- Var radīt neskaidrību C++ projektos par to, vai fails ir C stilā vai C++ stilā.
.hpp faili
Kas ir .hpp fails?
.hpp faili ir specifiski C++ galvenes faili. Tie darbojas tāpat kā .h faili, bet tiek izmantoti, lai skaidri norādītu, ka galvene ir paredzēta C++ kodam.
Lietošanas piemērs:
// vectorutils.hpp
#ifndef VECTORUTILS_HPP
#define VECTORUTILS_HPP
#include <vector>
std::vector<int> filter_even(const std::vector<int>& input);
#endif
Priekšrocības:
- Skaitri norāda, ka fails ir paredzēts C++ kodam.
- Novērš neskaidrību, sajaucot C un C++.
- Noderīgi jauktās valodu projektos vai komandās, kas ievēro stingras nosaukumu konvencijas.
Trūkumi:
- Nedaudz mazāk izplatīti vecākos koda bāzēs.
- Dažas mantotās sistēmas, kas sagaida
.h, tos neatpazīst.
.h vs .hpp: Galvenās atšķirības
| Īpaība | .h fails | .hpp fails |
|---|---|---|
| Valodas saistība | C un C++ | tikai C++ |
| Konvencija vai noteikums? | Konvencija | Konvencija |
| Lietojums C++ projektos | Izplatīts | Dažiem priekšroka skaidrības dēļ |
| Veidņu atbalsts | Jā | Jā |
| Koda neskaidrība | Iespējama jauktos valodu projektos | Mazāk ticama |
Labākā prakse .h un .hpp izvēlei
Šeit ir dažas vispārīgas vadlīnijas, kas palīdzēs izvēlēties:
Izmantojiet .h, ja:
- Jūs rakstāt kodu, kas jābūt saderīgam gan ar C, gan ar C++.
- Jūs uzturējat vai paplašināt mantoto kodu, kas jau izmanto
.h.
Izmantojiet .hpp, ja:
- Jūs vēlaties skaidri norādīt, ka fails ir specifisks C++.
- Jūs strādājat tikai C++ projektā vai izmantojat C++ specifiskas funkcijas, piemēram, klases, veidnes un vārdtelpas.
Bieži sastopamās projektu struktūras
Piemērs ar .h:
project/
├── main.cpp
├── mathutils.h
└── mathutils.cpp
Piemērs ar .hpp:
project/
├── main.cpp
├── vectorutils.hpp
└── vectorutils.cpp
Abas struktūras ir derīgas; atšķirība galvenokārt ir skaidrībā un komandas izvēlēs.
Secinājumi
Izvēle starp .h un .hpp galvenokārt ir konvencijas jautājums, nevis funkcionalitātes. Abi kalpo vienam mērķim: deklarēt interfeisus un kopīgu kodu vairākos C++ avota failos.
Tomēr C++ specifiskam kodam .hpp lietošana var skaidrāk izteikt jūsu nodomu un palīdzēt izvairīties no neskaidrībām lielākās koda bāzēs — īpaši, ja tās ietver vairākas valodas. Jauktajos valodu vai mantotajos projektos .h joprojām var būt piemērots.
Galvenais secinājums:
Izmantojiet
.hpp, ja vēlaties norādīt “šis ir tikai C++ kods” — turpiniet lietot.h, ja strādājat vidēs, kas apvieno C un C++.