Por omissão, as funções têm ligação externa e podem ser chamadas a partir de qualquer outro ficheiro do projeto.
Para saberes mais sobre ligação, consulta o conceito de ligação.
Uma função static só pode ser chamada dentro do ficheiro de código-fonte onde é definida.
Por exemplo
// 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
}
Mesmo que uma função seja declarada num ficheiro de cabeçalho, se for definida como static não poderá ser chamada de fora do seu ficheiro de código-fonte.
Um ficheiro de código-fonte pode incluir o cabeçalho, chamar a função static declarada no cabeçalho e compilar, mas o ligador não vai conseguir encontrar a definição da função static.
Uma função marcada como static num ficheiro de código-fonte não deve ser declarada no seu ficheiro de cabeçalho.