Hej jag undrar lite vad man använer en header fil till i sitt C++ projekt. Har kollat igenom lite header filer och sett att de innehåller en hel del preprocessing derektiv samt deklareringar av strukturer och konstanter. Är det detta som är huvudsyftet med header filer eller är kan man ha funktioner osv i en header fil också? En headerfil är bara till för deklarationer och liknande. Normalt har man alla definitioner i en motsvarande .cpp-fil. Syftet med en headerfil är att exportera de funktioner, klasser mm som skall kunna användas i andra .cpp filer. Ok så deta är ett perfekt sälle att deklarera strukturer osv som man vill använda i hela projektet eller bör man göra det genom att sätta dem globala? Du ser det lite "från fel håll" om du frågar mig. Du bör sträva efter att programmera objektorienterat, och då ska du inte rikigt tänka så, utan snarare "vad behöver det här objektet känna till", osv. I så fall är det ofta inte rimligt att använda strukturer, utan det mesta är klasser.Nybörjarfrågor om header fil
Min fråga är alltså vilket syfte har en header fil?
//HenrikSv: Nybörjarfrågor om header fil
Det i stort sett enda undantaget är s.k. inline-funktioner.
Det normala fallet är alltså:
x.h
---
class x
{
void f();
} ;
---
x.cpp
---
void x::f()
{
//...
}
---
Men om du har inlinefunktioner blir det:
x.h
---
class x
{
void f() {
//...
}
} ;
---
eller
x.h
---
class x
{
inline void f();
} ;
void x::f()
{
//...
}
---
Anledningen är att kompilatorn helt enkelt inte kan inlina kod om den ligger i en färdigkompilerad del.Sv: Nybörjarfrågor om header fil
Headerfiler hanteras egentligen inte på nåt speciellt sätt av kompilatorn. Att skriva #include "header.h" är samma sak som att kopiera in all text från filen header.h. Detta innebär att allt som kan finnas i en .cpp fil också kan finnas i en headerfil och tvärtom. Dock används samma headerfil i flera .cpp filer (annars finns det ju ingen anledning att ha en headerfil) så om man då har funktioner och variabler i headerfilen kommer dessa att finnas flera versioner vilket länkaren kommer att klaga på. Undantaget är, som Niklas skrev, "inline" funktioner.Sv: Nybörjarfrågor om header fil
Sv: Nybörjarfrågor om header fil
Nåväl, det rimligaste är att ha det modulärt, och det har du genom att använda olika filer. Du bör alltid sträva efter att delar av ett program känner till så lite som möjligt om saker runt om programmet, bara det absolut nödvändiga.