Classes de armazenamento em C: auto, extern, estático, classe de registro em C

Índice:

Anonim

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:

#include 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 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

#include extern i;main() {printf("value of the external integer is = %d\n", i);return 0;}

Segundo arquivo: original.c

#include i=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,

  1. Selecione o aplicativo de console
  2. 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.