Classes de armazenamento em C:auto, extern, static, classe de registro em C
O que é classe de armazenamento em C?
Uma classe de armazenamento representa a visibilidade e a localização de uma variável. Ele informa de qual parte do código podemos acessar uma variável. Uma classe de armazenamento em C é usada para descrever as seguintes coisas:
- O escopo da variável.
- O local onde a variável será armazenada.
- O valor inicializado de uma variável.
- A vida útil 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.
Há um total de quatro tipos de classes de armazenamento padrão. A tabela abaixo representa as classes de armazenamento em C.
Classe de armazenamento Propósito automático É uma classe de armazenamento padrão.extern É uma variável global.estática É uma variável local capaz de retornar um valor mesmo quando o controle é transferido para a chamada da função.registrar É uma variável que é armazenada dentro de um Register.
Neste tutorial 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 auto é 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 de 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;}
Tomamos 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:
#include <stdio.h> int 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 externo é usada quando temos funções ou variáveis globais que são compartilhadas entre dois ou mais arquivos.
Palavra-chaveexterna é usado para declarar uma variável global ou função em outro arquivo para fornecer a referência de 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 são acessíveis em todo o programa. Observe que a variável extern não pode ser inicializada ela já foi definida no arquivo original.
Example, extern void display();
Primeiro arquivo:main.c
#include <stdio.h> extern i; main() { printf("value of the external integer is = %d\n", i); return 0;}
Segundo arquivo:original.c
#include <stdio.h> i=48;
Resultado:
value of the external integer is = 48
Para compilar e executar o código acima, siga os passos abaixo
Etapa 1) Criar novo projeto,
- Selecione o aplicativo de console
- Clique em Ir
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 como mostrado no programa anterior no arquivo main.c e salve-o
Etapa 7) Crie um novo arquivo C [File -> new -> Empty File , 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) Construa e execute seu projeto. O resultado é mostrado na próxima figura
Classe de armazenamento estático em C
As variáveis estáticas são usadas dentro da 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 em que está definida.
- Variáveis globais estáticas são variáveis globais visíveis somente para o arquivo em que são declaradas.
Example: static int count = 10;
Tenha em mente que a variável estática tem um valor inicial padrão zero e é inicializada apenas uma vez em sua vida útil.
#include <stdio.h> /* 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= 7 iteration=15 and counter= 8 iteration=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 à 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 a 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 registradores quando quiser armazenar variáveis locais dentro de funções ou blocos em registradores 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 registrar é usado para declarar uma classe de armazenamento de registro. As variáveis declaradas usando a classe de armazenamento de registradores têm vida útil ao longo do 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 registradores são armazenadas dentro de registradores da CPU ao invés de uma memória. O registrador 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 <stdio.h> /* 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 tabela a seguir resume os principais recursos de cada classe de armazenamento que são comumente usados na programação C
Classe de armazenamento Declaração Armazenamento Valor inicial padrão Escopo Vida útil automático Dentro de uma função/blocoMemoryUnpredictableNa função/blocoNa função/blocoregistrar Dentro de uma função/blocoCPU RegistersGarbageIn the function/blockIn the function/blockextern Fora de todas as funçõesMemoryZeroEntre o arquivo e outros arquivos onde a variável é declarada como externprogram runtimeEstático (local) Dentro de uma função/blockMemoryZeroIn the function/blockprogram runtimeStatic (global) Fora de todas as funçõesMemoryZeroGlobalprogram runtime
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.
- Estático é 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.
Linguagem C