Se qualche cosa è dichiarata nel file di intestazione o nel file di origine non fa assolutamente alcuna differenza per il compilatore. In effetti, il compilatore non conosce assolutamente nulla riguardo ai "file di intestazione", poiché i file di intestazione sono incorporati nei file di origine dal cosiddetto preprocessore, che funziona prima del compilatore. Nel momento in cui i file di origine (con i file di intestazione incorporati) arrivano al compilatore effettivo, non c'è modo di dire cosa era originariamente e cosa è stato inserito dai file di intestazione. Il file sorgente con tutti i file di intestazione incorporati in esso è chiamato unità di traduzione. Cioè il compilatore funziona correttamente con le unità di traduzione, non con alcuni file "sorgente" o "intestazione".
In linguaggio C tutti gli oggetti e le funzioni dichiarati nell'ambito del file hanno collegamento esterno per impostazione predefinita, il che significa che sono globali, univoci per l'intero programma. Quindi, hai pensato in modo errato. Le funzioni non sono locali solo per un file sorgente.
Se si desidera rendere locale una funzione (o un oggetto) in una singola unità di traduzione, è necessario eseguire alcuni passaggi espliciti. Devi dichiararlo come static
. Dichiarandolo come statico si otterrà il collegamento interno , che in sostanza significa che diventa interno alla sua unità di traduzione.
La dichiarazione delle funzioni static
funziona solo se entrambi devono essere locali alle proprie unità di traduzione. Se questo non è il caso, cioè se almeno una delle funzioni dovrebbe essere una funzione accessibile a livello globale (collegabile), allora non hai altra scelta che rinominare una delle funzioni.
Ecco perché uso sempre nomi veramente significativi per variabili e funzioni. Se quelle due funzioni stanno facendo esattamente la stessa cosa, allora non hai bisogno di una di esse. Se stanno facendo cose diverse, dai a ciascuno un nome significativo che rifletta quello che fa. Chiunque debba mantenere il tuo codice ti ringrazierà. Le probabilità sono, che sarai tu. – Mawg