Indirettamente, sì.
Per sapere cosa succede al codice nel file di intestazione, è necessario capire come il compilatore li gestisce.
La direttiva #include
La direttiva #include
è una direttiva preprocessore. Anche prima che il compilatore inizi ad analizzare e tradurre il codice, elaborerà tutto #include
s inserendo l'intero codice nel file di intestazione specificato nella posizione dell'istruzione #include
. (Puoi vedere cosa sputa il preprocessore quando usi, per esempio, gcc -E ...
sui tuoi file sorgente.)
Ecco perché include le guardie sono importanti.
Quindi la risposta alla tua domanda è:
Sì, il codice nei file di intestazione è tradotto in un file oggetto - per essere precisi nel file oggetto del primo file sorgente tradotto che lo include in un'unità di traduzione.
Le definizioni nei file di intestazione devono essere note in ogni unità di traduzione che utilizza le definizioni. Se traduci il tuo file di programma per file e lo colleghi in seguito, avrai il codice nel file di intestazione compilato più volte. Questo è il motivo per cui dovresti mettere l'implementazione in un file sorgente separato. Se lo fai, dichiarerai ogni funzione solo in ogni unità di traduzione, ma non tradurrai l'implementazione. Tutti i file saranno quindi collegati al file di un oggetto con l'implementazione.