English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
A classe de armazenamento define variáveis no programa C/O escopo (visibilidade) e a vida útil da função. Esses modificadores são colocados antes do tipo que eles modificam. A seguir estão listados os tipos de classes de armazenamento disponíveis em programas C:
auto
register
static
extern
auto A 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 pode ser usado apenas dentro de funções, ou seja, auto pode modificar variáveis locais.
register A classe de armazenamento é usada para definir variáveis locais que são armazenadas no registrador em vez da RAM. Isso significa que o tamanho máximo da variável é igual ao tamanho do registrador (normalmente um word), e não pode ser aplicado o operador unário '&' a ela (porque não tem endereço de memória).
{ register int miles; }
O registrador é usado apenas para variáveis que precisam de acesso rápido, como contadores. Também deve ser notado que a definição de 'register' não significa que a variável será armazenada no registrador, mas que ela pode ser armazenada no registrador, dependendo das limitações de hardware e implementação.
static A classe de armazenamento indica ao compilador que os variáveis locais devem ser mantidas durante a vida do programa, sem a necessidade de serem criadas e destruídas a cada entrada e saída do escopo. Portanto, o uso do modificador static em variáveis locais pode manter o valor dessas variáveis entre chamadas de função.
O modificador static também pode ser aplicado a variáveis globais. Quando o modificador static é aplicado a uma variável global, ele limita o escopo da variável ao arquivo onde foi declarada.
Uma variável ou método static declarada globalmente pode ser chamada por qualquer função ou método, desde que estes apareçam no mesmo arquivo que a variável ou método static.
O exemplo a seguir demonstra o uso do modificador static para variáveis globais e locais:
#include <stdio.h> /* declaração de função */ void func1(void); static int count = 12; /* variável global - static é o padrão */ int main() { while (count--) { func1(); } return 0; } void func1(void) { /* 'hello' é a variável local de 'func1a variável local - somente inicializado uma vez * ao chamar a função 'func1o valor de 'hello' não é redefinido. */ static int hello = 4; hello++; printf("%d, count é %d\n", hello, count); }
No exemplo, count como variável global pode ser usada dentro da função, hello usando o modificador static não é redefinido em cada chamada.
Talvez você ainda não entenda este exemplo, porque já usei funções e variáveis globais, que até agora não foram explicadas. Mesmo que você não entenda completamente, não há problema, nas próximas seções explicaremos em detalhes. Quando o código acima for compilado e executado, ele produzirá o seguinte resultado:
hello é 5 count é 11 hello é 6 count é 10 hello é 7 count é 9 hello é 8 count é 8 hello é 9 count é 7 hello é 10 count é 6 hello é 11 count é 5 hello é 12 count é 4 hello é 13 count é 3 hello é 14 count é 2 hello é 15 count é 1 hello é 16 count é 0
extern A classe de armazenamento é usada para fornecer uma referência para uma variável global, que é visível em todos os arquivos do programa. Quando você usa extern quando, para variáveis que não podem ser inicializadas, o nome da variável aponta para uma posição de armazenamento previamente definida.
Quando você tem vários arquivos e define uma variável global ou função que pode ser usada em outros arquivos, pode usá-la extern para obter uma referência para a variável ou função já definida. Pode ser compreendido assim:extern é usado para declarar uma variável global ou função em outro arquivo.
O modificador extern é usado geralmente quando há dois ou mais arquivos compartilhando a mesma variável global ou função, conforme mostrado a seguir:
Primeiro arquivo: main.c
#include <stdio.h> int count; extern void write_extern(); int main() { count = 5; write_extern(); }
Segundo arquivo: support.c
#include <stdio.h> extern int count; void write_extern(void) { printf("count é %d\n", count); }
Aqui, o segundo arquivo contém extern A palavra-chave extern é usada para declarar que uma variável ou função já foi definida no primeiro arquivo main.c countAgora, compile esses dois arquivos, conforme mostrado a seguir:
$ gcc main.c support.c
Isso produzirá a.out Programa executável, quando executado, produzirá os seguintes resultados:
count is 5