Kāpēc mēs ne rakstām kodu galvenes failā?
sobes.tech AI
Atbilde no AI
Kods galvenes failos (.h vai .hpp C++) nav izvietots šādu iemeslu dēļ:
-
** Viena definīcijas principa pārkāpums (One Definition Rule - ODR).** Iekļaujot galvenes failu vairākos
.cppfailos, tajā esošais izpildāmais kods tiks definēts vairāk nekā vienu reizi, kas novedīs pie saites kļūdas (daudzkārtēja definēšana). Izņēmums –inlinefunkcijas un šablonu klases/funkcijas, kuras jādefinē katrā transliācijas modulī, kur tās tiek izmantotas.// example.h int g_counter = 0; // Globāla mainīgā - ODR pārkāpums void my_function() { // Funkcija - ODR pārkāpums // kāds kods } inline void my_inline_function() { // inline funkcija - izņēmums // kāds kods } template<typename T> void process(T value) { // Šablona funkcija - izņēmums // kāds kods } -
Kompilācijas laika palielināšana. Katru reizi iekļaujot galvenes failu, kompilators to pārstrādā no jauna. Koda izvietošana galvenes failos palielina kompilatora darba apjomu, palēninot projekta būvniecības procesu, īpaši lielos projektos.
-
Atbalsta un testēšanas sarežģītība. Kods, izkaisīts pa galvenes failiem, kļūst mazāk modulārs. Tas apgrūtina atsevišķu komponentu testēšanu un to neatkarīgu maiņu.
-
Cikla iekļaušanas riska (include loops). Nepareiza iekļaušanas organizācija ar kodu galvenes failos var novest pie cikliskām atkarībām un problēmām ar kompilāciju.
Galvenes failos parasti tiek deklarēti:
- Klases (definīcijas, bet ne metožu realizācijas)
- Funkcijas (prototipi)
- Globālas mainīgās (ar
extern) - Konstantes
- Šablonu klases un funkcijas (pilni definīcijas)
inlinefunkcijas (pilni definīcijas)- Datu tipi (
struct,enum,typedef,using) - Vārdu telpas (
namespace)
Koda realizācija (funkciju ķermeņi, statisko locekļu un globālo mainīgo definīcijas) tiek izvietota atbilstošajos realizācijas failos (.cpp).