O que é classe de armazenamento em C?
Uma classe de armazenamento representa a visibilidade e a localização de uma variável. Diz de que parte do código podemos acessar uma variável. Uma classe de armazenamento em C é usada para descrever o seguinte:
- O escopo da variável.
- O local onde a variável será armazenada.
- O valor inicializado de uma variável.
- O tempo de vida de uma variável.
- Quem pode acessar uma variável?
Assim, uma classe de armazenamento é usada para representar as informações sobre uma variável.
NOTA: Uma variável não está associada apenas a um tipo de dado, seu valor, mas também a uma classe de armazenamento.
Existem no total quatro tipos de classes de armazenamento padrão. A tabela abaixo representa as classes de armazenamento em C.
Classe de armazenamento | Propósito |
auto | É uma classe de armazenamento padrão. |
externo | É uma variável global. |
estático | É uma variável local que é capaz de retornar um valor mesmo quando o controle é transferido para a chamada de função. |
registro | É uma variável que fica armazenada dentro de um registrador. |
Neste tutorial em C, você aprenderá diferentes tipos de classes de armazenamento em C com exemplos-
- Classe de armazenamento automático em C
- Classe de armazenamento externo em C
- Primeiro arquivo: main.c
- Segundo arquivo: original.c
- Classe de armazenamento estático em C
- Registrar classe de armazenamento em C
Classe de armazenamento automático em C
As variáveis definidas usando a classe de armazenamento automático são chamadas de variáveis locais. Auto significa classe de armazenamento automático. Uma variável está na classe de armazenamento automático por padrão se não for especificada explicitamente.
O escopo de uma variável automática é limitado apenas ao bloco específico. Uma vez que o controle sai do bloco, o acesso é destruído. Isso significa que apenas o bloco no qual a variável automática é declarada pode acessá-la.
Uma palavra-chave auto é usada para definir uma classe de armazenamento automático. Por padrão, uma variável automática contém um valor lixo.
Example, auto int age;
O programa abaixo define uma função com duas variáveis locais
int add(void) {int a=13;auto int b=48;return a+b;}
Pegamos outro programa que mostra o nível de escopo "nível de visibilidade" para variáveis automáticas em cada código de bloco que são independentes entre si:
#includeint main( ){auto int j = 1;{auto int j= 2;{auto int j = 3;printf ( " %d ", j);}printf ( "\t %d ",j);}printf( "%d\n", j);}
RESULTADO:
3 2 1
Classe de armazenamento externo em C
Extern significa classe de armazenamento externo. A classe de armazenamento externa é usada quando temos funções ou variáveis globais que são compartilhadas entre dois ou mais arquivos.
A palavra- chave extern é usada para declarar uma variável global ou função em outro arquivo para fornecer a referência da variável ou função que já foi definida no arquivo original.
As variáveis definidas usando uma palavra-chave externa são chamadas de variáveis globais. Essas variáveis estão acessíveis em todo o programa. Observe que a variável externa não pode ser inicializada, ela já foi definida no arquivo original.
Example, extern void display();
Primeiro arquivo: main.c
#includeextern i;main() {printf("value of the external integer is = %d\n", i);return 0;}
Segundo arquivo: original.c
#includei=48;
Resultado:
value of the external integer is = 48
Para compilar e executar o código acima, siga as etapas abaixo
Etapa 1) Crie um novo projeto,
- Selecione o aplicativo de console
- Clique em Go
Etapa 2) Selecione C e clique em Avançar
Etapa 3) Clique em Avançar
Etapa 4) Insira os detalhes e clique em Avançar
Etapa 5) Clique em Concluir
Etapa 6) Coloque o código principal conforme mostrado no programa anterior no arquivo main.c e salve-o
Etapa 7) Crie um novo arquivo C [Arquivo -> novo -> Arquivo vazio, salve (como original.c) e adicione-o ao projeto atual clicando em "OK" na caixa de diálogo.
Etapa 8) Coloque e salve o código C do arquivo original.c mostrado no exemplo anterior sem a função main ().
Etapa 9) Construir e executar seu projeto. O resultado é mostrado na próxima figura
Classe de armazenamento estático em C
As variáveis estáticas são usadas na função / arquivo como variáveis estáticas locais. Eles também podem ser usados como uma variável global
- Variável local estática é uma variável local que retém e armazena seu valor entre chamadas de função ou bloco e permanece visível apenas para a função ou bloco no qual está definida.
- Variáveis globais estáticas são variáveis globais visíveis apenas para o arquivo em que foram declaradas.
Example: static int count = 10;
Lembre-se de que a variável estática tem um valor inicial padrão zero e é inicializada apenas uma vez na vida.
#include/* function declaration */void next(void);static int counter = 7; /* global variable */main() {while(counter<10) {next();counter++; }return 0;}void next( void ) { /* function definition */static int iteration = 13; /* local static variable */iteration ++;printf("iteration=%d and counter= %d\n", iteration, counter);}
Resultado:
iteration=14 and counter= 7iteration=15 and counter= 8iteration=16 and counter= 9
As variáveis globais são acessíveis em todo o arquivo, enquanto as variáveis estáticas são acessíveis apenas para a parte específica de um código.
A vida útil de uma variável estática está em todo o código do programa. Uma variável que é declarada ou inicializada usando uma palavra-chave estática sempre contém zero como valor padrão.
Registrar classe de armazenamento em C
Você pode usar a classe de armazenamento de registro quando quiser armazenar variáveis locais dentro de funções ou blocos em registros de CPU em vez de RAM para ter acesso rápido a essas variáveis. Por exemplo, "contadores" são bons candidatos para serem armazenados no registro.
Example: register int age;
A palavra-chave register é usada para declarar uma classe de armazenamento de registro. As variáveis declaradas usando a classe de armazenamento de registro têm vida útil em todo o programa.
É semelhante à classe de armazenamento automático. A variável é limitada ao bloco específico. A única diferença é que as variáveis declaradas usando a classe de armazenamento de registro são armazenadas dentro dos registros da CPU em vez de uma memória. O Register tem acesso mais rápido que o da memória principal.
As variáveis declaradas usando a classe de armazenamento de registro não têm valor padrão. Essas variáveis geralmente são declaradas no início de um programa.
#include/* function declaration */main() {{register int weight;int *ptr=&weight ;/*it produces an error when the compilation occurs ,we cannot get a memory location when dealing with CPU register*/}}
RESULTADO:
error: address of register variable 'weight' requested
A próxima tabela resume os principais recursos de cada classe de armazenamento que são comumente usados na programação C
Classe de Armazenamento | Declaração | Armazenar | Valor inicial padrão | Escopo | Vida |
auto | Dentro de uma função / bloco | Memória | Imprevisível | Dentro da função / bloco | Dentro da função / bloco |
registro | Dentro de uma função / bloco | Registros de CPU | Lixo | Dentro da função / bloco | Dentro da função / bloco |
externo | Fora de todas as funções | Memória | Zero | Todo o arquivo e outros arquivos onde a variável é declarada como externa | tempo de execução do programa |
Estático (local) | Dentro de uma função / bloco | Memória | Zero | Dentro da função / bloco | tempo de execução do programa |
Estático (global) | Fora de todas as funções | Memória | Zero | Global | tempo de execução do programa |
Resumo
Neste tutorial, discutimos as classes de armazenamento em C, para resumir:
- Uma classe de armazenamento em C é usada para representar informações adicionais sobre uma variável.
- A classe de armazenamento representa o escopo e a vida útil de uma variável.
- Também informa quem pode acessar uma variável e de onde?
- Auto, extern, register, static são as quatro classes de armazenamento diferentes em um programa C.
- Um especificador de classe de armazenamento em linguagem C é usado para definir variáveis, funções e parâmetros.
- auto é usado para uma variável local definida dentro de um bloco ou função
- register é usado para armazenar a variável nos registradores da CPU, em vez da localização da memória para acesso rápido.
- Static é usado para variáveis globais e locais. Cada um tem seu caso de uso dentro de um programa C.
- Extern é usado para compartilhamento de dados entre arquivos de projeto C.