Las funciones tienen enlazado externo de forma predeterminada y se pueden llamar desde cualquier otro archivo del proyecto.
Para obtener más información sobre el enlazado, consulta el concepto de enlazado.
Una función static solo se puede llamar dentro del archivo fuente en el que está definida.
Por ejemplo:
// file scope, internal linkage
// can only be called from within this file
static void some_function()
{
// code snipped
}
// file scope, external linkage by default
// can be called from any other file in the project
int main()
{
// code snipped
}
Aunque una función se declare en una cabecera, si se define como static no se podrá llamar desde fuera de su archivo fuente.
Un archivo fuente podría incluir la cabecera, llamar a la función static declarada en ella y compilar, pero el enlazador no encontrará la definición de la función static.
Una función marcada como static en un archivo fuente no debería declararse en su archivo de cabecera.