Classes de armazenamento C

A "classe de armazenamento" de uma variável determina se o item tem um tempo de vida “global” ou “local”. C chama esses dois tempos de vida de "estáticos" e "automáticos". Um item com um tempo de vida global existe e tem um valor durante a execução do programa. Todas as funções têm tempos de vida globais.

Variáveis automáticas ou variáveis com tempo de vida local são alocadas ao novo armazenamento sempre que o controle de execução passa para o bloco no qual elas estão definidas. Quando a execução retornar, as variáveis não terão mais valores significativos.

C fornece os seguintes especificadores de classe de armazenamento:

Sintaxe

storage-class-specifier:
auto
register
static
extern
typedef
__declspec ( extended-decl-modifier-seq ) /* Específico da Microsoft */

Com exceção de __declspec, você pode usar somente um storage-class-specifier no declaration-specifier em uma declaração. Se nenhuma especificação de classe de armazenamento for feita, as declarações de um bloco criarão objetos automáticos.

Os itens declarados com o especificador auto ou register têm tempos de vida locais. Os itens declarados com o especificador static ou extern têm tempos de vida globais.

Como typedef e __declspec são semanticamente diferentes dos outros quatro terminais storage-class-specifier, eles são discutidos separadamente. Para obter informações específicas sobre typedef, consulte typedefDeclarações. Para obter informações específicas sobre __declspec, consulte Atributos de classe de armazenamento estendidos.

O posicionamento de declarações de variável e de função em arquivos de origem também afeta a classe e a visibilidade de armazenamento. Declarações fora de todas as definições de função supostamente aparecem no "nível externo". As declarações dentro das definições de função aparecem no "nível interno".

O significado exato de cada especificador de classe de armazenamento depende de dois fatores:

  • Se a declaração aparece no nível externo ou interno

  • Se o item que está sendo declarado é uma variável ou uma função

Especificadores de classe de armazenamento para declarações de nível externo e Especificadores de classe de armazenamento para declarações de nível interno descrevem os terminais storage-class-specifier em cada tipo de declaração e explicam o comportamento padrão quando o storage-class-specifier é omitido de uma variável. Especificadores de classe de armazenamento com declarações de função discutem os especificadores de classe de armazenamento usados com as funções.

Confira também

Declarações e tipos