Por padrão, as funções têm ligação externa e podem ser chamadas de qualquer outro arquivo do projeto.
Para saber mais sobre ligação, consulte o conceito de ligação.
Uma função static só pode ser chamada dentro do arquivo-fonte em que é 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 em um cabeçalho, se ela for definida como static, não será possível chamá-la de fora do seu arquivo-fonte.
Um arquivo-fonte poderia incluir o cabeçalho, chamar a função static declarada nele e compilar, mas o linker não conseguirá encontrar a definição da função static.
Uma função marcada como static em um arquivo-fonte não deve ser declarada no seu arquivo de cabeçalho.