Especificadores de classe de armazenamento com declarações de função
Você pode usar static ou o especificador de classe de armazenamento extern em declarações de função. As funções sempre têm tempos de vida globais.
Específico da Microsoft
As declarações de função no nível interno têm o mesmo significado que as declarações de função no nível externo. Isso significa que uma função é visível do ponto de declaração durante o restante da unidade de conversão mesmo que seja declarada no escopo local.
FIM de Específico da Microsoft
As regras de visibilidade para funções variam ligeiramente das regras para as variáveis, como segue:
Uma função declarada como static só é visível no arquivo de origem em que é definida. As funções no mesmo arquivo de origem podem chamar a função static, mas as funções em outros arquivos de origem não podem acessá-la diretamente pelo nome. Você pode declarar outra função static com o mesmo nome em outro arquivo de origem sem conflito.
As funções declaradas como extern são visíveis nos arquivos de origem do programa (a menos que você redeclare posteriormente tal função como static). Qualquer função pode chamar uma função extern.
As declarações de função que omitem o especificador de classe de armazenamento são extern por padrão.
Específico da Microsoft
A Microsoft permite a redefinição de um identificador extern como static.
FIM de Específico da Microsoft