Si algo se declara en el archivo de encabezado o en el archivo de código fuente no supone ninguna diferencia para el compilador. De hecho, el compilador propiamente dicho no conoce absolutamente nada sobre ningún "archivo de cabecera", ya que los archivos de cabecera están incrustados en los archivos fuente por el llamado preprocesador, que hace su trabajo antes del compilador propiamente dicho. En el momento en que los archivos de origen (con archivos de encabezado incrustados) llegan al compilador real, no hay forma de saber qué había originalmente y qué se insertó de los archivos de encabezado. El archivo de origen con todos los archivos de encabezado incrustados se llama unidad de traducción. Es decir. el compilador funciona correctamente con unidades de traducción, no con algunos archivos "fuente" o "encabezado".
En lenguaje C todos los objetos y funciones declarados en el alcance del archivo tienen enlace externo de forma predeterminada, lo que significa que son globales, únicos para todo el programa. Entonces, pensaste incorrectamente. Las funciones no son locales para un solo archivo fuente.
Si desea convertir una función (o un objeto) local en una sola unidad de traducción, debe realizar algunos pasos explícitos. Debe declararlo como static
. Declararlo como estático le dará el enlace interno , lo que significa esencialmente que se convierte en interno de su unidad de traducción.
Declarar sus funciones static
solo funcionará si las dos realmente tienen que ser locales para sus propias unidades de traducción. Si este no es el caso, es decir, si al menos una de las funciones debe ser una función accesible globalmente (vinculable), entonces no tiene más remedio que renombrar una de las funciones.
Es por eso que siempre uso nombres verdaderamente significativos para variables y funciones. Si esas dos funciones están haciendo exactamente lo mismo, entonces no necesita una de ellas. Si están haciendo cosas diferentes, dale a cada uno un nombre significativo que refleje lo que hace. Quien tenga que mantener tu código te lo agradecerá. Lo más probable es que seas tú. – Mawg