Introdução às classes de armazenamento C
Todo valor ou número precisa ser armazenado em algum lugar para uso posterior, certo? Isso pode ser feito usando variáveis em C. Variáveis são áreas de armazenamento usadas em nossos programas. Cada variável será de um tipo específico, como número inteiro, caractere e também terá tamanho e layout específicos, dependendo do tipo. Cada tipo de variável deve ser armazenado em uma parte específica da memória e terá permissões de acesso restritas ou específicas. As Classes de armazenamento em C determinam em qual parte da memória cada variável deve ser armazenada e também decide o escopo (visibilidade) da variável. Existem quatro tipos de classes de armazenamento - automática, externa, estática e registradora. Um especificador de armazenamento pode ser mencionado junto com a variável
Tipos de classes de armazenamento em C
Os tipos de classes de armazenamento em C são os seguintes
1. Classe de Armazenamento Automático
Todas as variáveis declaradas em uma função ou bloco serão armazenadas em um especificador automático por padrão, mesmo que não estejam explicitamente definidas. O especificador para esta classe de armazenamento é 'auto'. O escopo ou a visibilidade das variáveis na classe de armazenamento automático é local para o bloco ou função que está definido. A variável será destruída quando sairmos da função ou do bloco.
Isso pode ser explicado melhor com um exemplo. Considere o exemplo abaixo:
Código:
int main() (
int i = 2;
( int i = 4;
printf(“%d\n”, i);
)
printf(“%d\n”, i);
)
Resultado:
4
2
Aqui, uma variável I do tipo inteiro é declarada primeiro com o valor 2 atribuído a ela. A seguir, dentro de um loop ou bloco, a variável I do mesmo tipo inteiro é declarada com o valor 4 atribuído a ele. Se o especificador de armazenamento não for mencionado, por padrão, ele será tomado como automático. Na primeira instrução printf, mencionada dentro do bloco, imprimirá 4 ao imprimir o valor de I. Enquanto na segunda instrução printf mencionada fora do bloco, imprimirá o valor de I como 2, o valor mencionado fora o bloco. É melhor inicializar algum valor para variáveis automáticas, pois há chances de obter algum valor de lixo às vezes se a inicialização não for concluída. Este exemplo fornece uma imagem clara das variáveis automáticas e do escopo local.
2. Registrar Classe de Armazenamento
As variáveis armazenadas na classe de armazenamento de registro também terão escopo local, o que significa que ela é acessível ou visível apenas no bloco em que é declarada. Esse armazenamento é semelhante ao automático, mas a principal diferença é que as variáveis automáticas são armazenadas na memória, enquanto as variáveis de registro são armazenadas nos registros da CPU. Isso é feito se queremos acessar a variável com muita frequência. Estes podem ser usados mais rapidamente. Apenas algumas variáveis são armazenadas usando especificadores de registro. Se não houver espaço no registro, ele será armazenado apenas na memória. Nenhum valor inicial é atribuído às variáveis de registro. Além disso, o operador & (endereço de) não pode ser usado em variáveis de registro. Por exemplo, variáveis usadas para contadores ou tipos de uso semelhantes são armazenadas usando o especificador de registro.
3. Classe de Armazenamento Estático
A variável, seja global ou local, é armazenada usando o especificador estático na classe de armazenamento estático quando a variável precisa ser declarada uma vez e o valor precisa ser retido. Quando uma variável é declarada como estática, o valor será salvo ou retido entre as chamadas de função. O armazenamento permanente é criado e declarado apenas uma vez. Quando uma variável local é declarada como estática, o armazenamento permanente é criado para ela e o valor é retido toda vez que é usado. Também de acordo com o escopo da variável local usual, as variáveis locais estáticas também são visíveis apenas para a função ou bloco em que está definida. Quando uma variável global é declarada como estática, semelhante ao local estático, o armazenamento permanente é criado e declarado apenas uma vez. Mas, mesmo sendo globais, essas variáveis são visíveis apenas no arquivo em que estão definidas.
As variáveis estáticas podem ser claramente representadas usando o exemplo abaixo:
Código:
int samplefunc() (
static int a = 0;
a = a+2;
return a;
)
int main() (
int result1 = samplefunc();
int result2 = samplefunc();
printf("%d\n", result1);
printf("%d\n", result2);
)
Resultado:
2
4
Aqui, no programa acima, quando o samplefunc () é chamado, a variável a é definida e inicializada na primeira vez e o armazenamento permanente é criado para ela. Pela expressão matemática usada na função, o valor de a se torna 2. Mas quando o mesmo samplefunc () é chamado na segunda vez, a variável a não é definida ou inicializada novamente, mas recebe o último valor retido e continua com a operação tornando o resultado final como 4. Esse é o principal uso e vantagem das variáveis estáticas.
4. Classe de Armazenamento Externo
A variável declarada como externa mostra que a variável é definida em outro lugar em outro programa. Essas variáveis externas são usadas quando queremos que qualquer variável ou função definida em um programa seja usada em outro arquivo também. As variáveis com especificador externo são armazenadas na classe de armazenamento externo. Quando a variável é declarada como externa é um programa, ela especifica a ligação externa e, portanto, não é definida ou inicializada novamente. O armazenamento é alocado apenas um e também inicializado apenas uma vez. Se variáveis externas forem inicializadas novamente com outro valor no programa externo, obteremos um erro informando 'Redefinição da variável'.
Variáveis externas são explicadas usando o exemplo abaixo:
Código:
Prg1.c
int count;
int main() (
count = 10;
)
Prg2.c
extern int count;
int main() (
printf(“%d”, count);
)
Resultado:
10
Aqui, a contagem de variáveis inteiras é declarada no primeiro programa C (Prg1.c) e, dentro da função principal, é inicializada com o valor 10. No segundo programa C, a mesma variável de contagem é declarada usando o especificador externo, que especifica que existe ligação externa e o valor é buscado no armazenamento e o valor 10 é atribuído à contagem de valores quando o imprimimos no segundo programa. Esse é o uso de variáveis externas. Portanto, dependendo da finalidade diferente, cada classe de armazenamento é usada para variáveis apropriadas e é declarada com os especificadores correspondentes.
Artigos recomendados
Este é um guia para as classes de armazenamento C. Aqui discutimos tipos de classes de armazenamento, que incluem classe de armazenamento automático, classe de armazenamento de registro, classe de armazenamento estático e classe de armazenamento externo. Você também pode consultar os seguintes artigos para saber mais:
- O que é o JavaBeans?
- ES6 vs ES5
- C ++ vs Visual C ++
- Desempenho C vs C ++