C - Classes de Armazenamento
Uma classe de armazenamento define o escopo (visibilidade) e o tempo de vida das variáveis e/ou funções dentro de um Programa C. Eles precedem o tipo que eles modificam. Temos quatro classes de armazenamento diferentes em um programa C -
- automático
- registrar
- estático
- externo
A classe de armazenamento automático
O automático classe de armazenamento é a classe de armazenamento padrão para todas as variáveis locais.
{ int mount; auto int month; }
O exemplo acima define duas variáveis com a mesma classe de armazenamento. 'auto' só pode ser usado dentro de funções, ou seja, variáveis locais.
A classe de armazenamento de registro
O registro A classe de armazenamento é usada para definir variáveis locais que devem ser armazenadas em um registrador em vez de na RAM. Isso significa que a variável tem um tamanho máximo igual ao tamanho do registrador (geralmente uma palavra) e não pode ter o operador unário '&' aplicado a ela (pois não possui um local de memória).
{ register int miles; }
O registro deve ser usado apenas para variáveis que requerem acesso rápido, como contadores. Deve-se notar também que definir 'registro' não significa que a variável será armazenada em um registro. Isso significa que PODE ser armazenado em um registro dependendo das restrições de hardware e implementação.
A classe de armazenamento estático
A estática A classe de armazenamento instrui o compilador a manter uma variável local em existência durante o tempo de vida do programa, em vez de criá-la e destruí-la cada vez que ela entra e sai do escopo. Portanto, tornar as variáveis locais estáticas permite que elas mantenham seus valores entre as chamadas de função.
O modificador estático também pode ser aplicado a variáveis globais. Quando isso é feito, faz com que o escopo dessa variável fique restrito ao arquivo no qual ela é declarada.
Na programação C, quando estático é usado em uma variável global, faz com que apenas uma cópia desse membro seja compartilhada por todos os objetos de sua classe.
Demonstração ao vivo
#include <stdio.h> /* function declaration */ void func(void); static int count = 5; /* global variable */ main() { while(count--) { func(); } return 0; } /* function definition */ void func( void ) { static int i = 5; /* local static variable */ i++; printf("i is %d and count is %d\n", i, count); }
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
i is 6 and count is 4 i is 7 and count is 3 i is 8 and count is 2 i is 9 and count is 1 i is 10 and count is 0
A classe de armazenamento externo
O externo A classe de armazenamento é usada para fornecer uma referência de uma variável global que é visível para TODOS os arquivos de programa. Quando você usa 'extern', a variável não pode ser inicializada, no entanto, ela aponta o nome da variável para um local de armazenamento que foi definido anteriormente.
Quando você tem vários arquivos e define uma variável ou função global, que também será usada em outros arquivos, então extern será usado em outro arquivo para fornecer a referência da variável ou função definida. Apenas para compreensão, externo é usado para declarar uma variável global ou função em outro arquivo.
O modificador extern é mais comumente usado quando há dois ou mais arquivos compartilhando as mesmas variáveis globais ou funções, conforme explicado abaixo.
Primeiro arquivo:main.c
#include <stdio.h> int count ; extern void write_extern(); main() { count = 5; write_extern(); }
Segundo arquivo:support.c
#include <stdio.h> extern int count; void write_extern(void) { printf("count is %d\n", count); }
Aqui, externo está sendo usado para declarar count no segundo arquivo, onde como tem sua definição no primeiro arquivo, main.c. Agora, compile esses dois arquivos da seguinte forma -
$gcc main.c support.c
Ele irá produzir o programa executável a.out . Quando este programa é executado, ele produz o seguinte resultado -
count is 5
Linguagem C