O que significa restrição estática na linguagem de programação C?

A palavra-chave static serve a dois propósitos distintos em C, o que chamo de duração (a vida útil de um objeto) e visibilidade (de onde você pode usar um objeto). Lembre-se de que o padrão C realmente usa palavras diferentes para esses dois conceitos, mas descobri ao ensinar o idioma que é melhor usar termos do cotidiano para começar.

Quando usado no nível do arquivo (fora de qualquer função), controla a visibilidade. A duração das variáveis ​​definidas no nível do arquivo já está definida como sendo a duração inteira do programa, assim você não precisa de static para isso.

Variáveis ​​estáticas no nível do arquivo são invisíveis para qualquer coisa fora da unidade de tradução (o vinculador não pode vê-lo).

Quando usado no nível da função (dentro de uma função), controla a duração. Isso ocorre porque a visibilidade já está definida como local para essa função.

Nesse caso, a duração da variável é toda a duração do programa e o valor é mantido entre as invocações da função.