Las funciones tienen enlace externo por defecto y se pueden llamar desde cualquier otro archivo del proyecto.
Para obtener más información sobre el enlace, consulta el concepto de enlace.
A una función static solo se la puede llamar dentro del archivo fuente donde 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 un encabezado, si se define como static no se podrá llamar desde fuera de su archivo fuente.
Un archivo fuente podría incluir el encabezado, llamar a la función static declarada en el encabezado 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 encabezado.