L'importazione in Java, C # e simili è fondamentalmente diversa dall'inclusione in C e C ++:
Il primo aggiungerà i moduli nominati a quelli considerati per la risoluzione dei simboli, quest'ultimo inserirà letteralmente il contenuto delle intestazioni nominate nell'unità di traduzione.
Ciò significa che un'intestazione può contenere tutto ciò che il file sorgente può contenere, compresi gli oggetti locali dell'unità di traduzione (potrebbero avere un costruttore e un distruttore in C ++), funzioni, strutture (e per le classi C ++).
Che non è così male come sembra per C, dato che le intestazioni tendono a contenere principalmente dichiarazioni in avanti, definizioni di struct e macro di preprocessore.
In C ++ invece, i template (che sono molto più potenti dei generici Java o C # di gran lunga più potenti) devono generalmente essere implementati nelle intestazioni, il che li porta a dimensioni e complessità considerevoli (spesso superando per ordine di grandezza l'origine) file dell'unità di traduzione).
Il comitato C ++ sta lavorando su un sistema modulare per occuparsene, ma al più presto ci sarà in C ++ 17 (e non trattenere ancora il respiro).
Quindi, per le lingue con modulo-sistema (Java, C #) si avrà solo un leggero rallentamento per l'analisi e la compilazione.
Per C, probabilmente avrai solo un rallentamento leggermente più alto, dovuto all'inclusione letterale della fonte, anche se almeno tendono a non essere troppo grandi e complessi.
Per C ++, si verificherà un rallentamento da moderato a grave della compilazione e dell'analisi, a causa dell'uso intensivo di modelli e funzioni inline.
In entrambe le intestazioni C e C ++, in teoria, possono contenere oggetti locali TU, il che comporterebbe un sovraccarico di runtime.
Mentre so che tale è usato da C ++ per <iostream>
(cerca ios_base::Init
nello standard) per inizializzare i flussi C ++ abbastanza presto, non so di alcun uso in C.