Etimologia de funções “estáticas”

5

Eu entendo porque as variáveis locais estáticas são chamadas de "estáticas" - queremos que elas sejam alocadas na memória estática! Mas qual é a razão para chamar funções e variáveis que queremos restringir ao arquivo atual "estático"? Eu não vejo a conexão; De qualquer forma, eles estão alocados na memória estática, certo?

    
por Elliot Gorokhovsky 21.10.2016 / 15:54
fonte

3 respostas

3

A palavra-chave static está sobrecarregada com vários significados e qual significado se aplica depende de onde ela aparece. Ela afeta tanto a duração de armazenamento (tempo de vida) de um objeto quanto a ligação do identificador associado a um objeto de função declarado no escopo do arquivo.

Consulte "6.2.2 Ligações de Identificadores" e "6.2.4 Duração de Armazenamento de Objetos" no esboço online do Padrão C11 para detalhes.

Observe que a palavra-chave static afeta apenas a vinculação para identificadores de função e objeto declarados no escopo do arquivo (fora do corpo de qualquer função) - identificadores declarados dentro de uma função ou bloco (e sem a palavra extern ) não têm vinculação .

    
por 21.10.2016 / 17:45
fonte
1

I get why static local variables are called "static" -- we want them to be allocated in static memory

Hum, não. A palavra-chave static remonta aos primeiros dias da linguagem de programação C, onde ela pode especificar o escopo e o tempo de vida de o item .

As linguagens "inspiradas" por C copiaram a palavra-chave static e a usaram com seu significado de "tempo de vida": os membros estáticos normalmente têm uma duração de toda a execução do aplicativo.

    
por 21.10.2016 / 16:06
fonte
0

Em C, e dependendo do uso, as palavras-chave static e extern denotam o escopo ou o tempo de vida de uma variável

IMHO, isso foi (e continua a ser) um erro. Parece ilógico que o uso de static em uma variável no arquivo-escopo tenha um significado diferente do que quando usado em uma variável de escopo de função.

Pelo menos o C ++ corrigiu isso, usando public e private para o escopo, enquanto retinha static para o tempo de vida.

    
por 17.02.2017 / 08:36
fonte