Waarom schrijven we geen code in het koptekstbestand?
sobes.tech AI
Antwoord van AI
De code in headerbestanden (.h of .hpp in C++) moet niet worden geplaatst om de volgende redenen:
-
Overschrijding van de regel van één definitie (One Definition Rule - ODR). Wanneer meerdere
.cpp-bestanden een headerbestand includen dat uitvoerbare code bevat, wordt deze meer dan eens gedefinieerd, wat leidt tot een linkfout (multiple definition). Uitzonderingen zijninlinefuncties en sjabloonklassen/-functies, die in elke vertaalmodule waarin ze worden gebruikt, gedefinieerd moeten worden.// voorbeeld.h int g_counter = 0; // Globale variabele - overtreding van ODR void my_function() { // Functie - overtreding van ODR // code } inline void my_inline_function() { // inline functie - uitzondering // code } template<typename T> void process(T value) { // sjabloonfunctie - uitzondering // code } -
Verhoogde compilatietijd. Elke keer dat een headerbestand wordt geïncludeerd, verwerkt de compiler de inhoud opnieuw. Het plaatsen van code in headerbestanden verhoogt de werklast voor de compiler en vertraagt het bouwproces, vooral bij grote projecten.
-
Moeilijkheden bij onderhoud en testen. Code die verspreid is over headerbestanden wordt minder modulair. Dit bemoeilijkt het testen van afzonderlijke componenten en hun onafhankelijke wijziging.
-
Risico op include-loops (include loops). Onjuiste organisatie van includes met code in headerbestanden kan leiden tot cyclische afhankelijkheden en compilatieproblemen.
In headerbestanden worden doorgaans gedeclareerd:
- Klassen (definities, maar geen methodenimplementaties)
- Functies (prototypes)
- Globale variabelen (met
extern) - Constanten
- Sjablonen van klassen en functies (volledige definities)
inlinefuncties (volledige definities)- Gegevenstypen (
struct,enum,typedef,using) - Naamruimten (
namespace)
De implementatie van de code (functiekoppen, definities van statische leden van klassen en globale variabelen) wordt geplaatst in de bijbehorende implementatiebestanden (.cpp).