Neste tutorial, você aprenderá sobre o escopo e o tempo de vida de variáveis locais e globais. Além disso, você aprenderá sobre variáveis estáticas e de registro.
Cada variável na programação C tem duas propriedades: tipo e classe de armazenamento.
Tipo refere-se ao tipo de dados de uma variável. E a classe de armazenamento determina o escopo, a visibilidade e o tempo de vida de uma variável.
Existem 4 tipos de classe de armazenamento:
- automático
- externo
- estático
- registro
Variável Local
As variáveis declaradas dentro de um bloco são variáveis automáticas ou locais. As variáveis locais existem apenas dentro do bloco em que são declaradas.
Vamos dar um exemplo.
#include int main(void) ( for (int i = 0; i < 5; ++i) ( printf("C programming"); ) // Error: i is not declared at this point printf("%d", i); return 0; )
Ao executar o programa acima, você obterá um identificador não declarado de erro i. É porque i é declarado dentro do for
bloco de loop. Fora do bloco, não é declarado.
Vamos dar outro exemplo.
int main() ( int n1; // n1 is a local variable to main() ) void func() ( int n2; // n2 is a local variable to func() )
No exemplo acima, n1 é local para main()
e n2 é local para func()
.
Isso significa que você não pode acessar a variável n1 interna, func()
pois ela existe apenas internamente main()
. Da mesma forma, você não pode acessar a variável n2 interna, main()
pois ela existe apenas internamente func()
.
Variável Global
Variáveis que são declaradas fora de todas as funções são conhecidas como variáveis externas ou globais. Eles são acessíveis a partir de qualquer função dentro do programa.
Exemplo 1: Variável Global
#include void display(); int n = 5; // global variable int main() ( ++n; display(); return 0; ) void display() ( ++n; printf("n = %d", n); )
Resultado
n = 7
Suponha que uma variável global seja declarada em file1
. Se você tentar usar essa variável em um arquivo diferente file2
, o compilador reclamará. Para resolver este problema, a palavra extern
- chave é usada file2
para indicar que a variável externa está declarada em outro arquivo.
Registrar Variável
A register
palavra-chave é usada para declarar variáveis de registro. As variáveis de registro deveriam ser mais rápidas do que as variáveis locais.
No entanto, os compiladores modernos são muito bons em otimização de código e há uma chance rara de que o uso de variáveis de registro torne seu programa mais rápido.
A menos que você esteja trabalhando em sistemas embarcados onde saiba como otimizar o código para um determinado aplicativo, não há uso de variáveis de registro.
Variável Estática
Uma variável estática é declarada usando a static
palavra - chave. Por exemplo;
static int i;
O valor de uma variável estática persiste até o final do programa.
Exemplo 2: variável estática
#include void display(); int main() ( display(); display(); ) void display() ( static int c = 1; c += 5; printf("%d ",c); )
Resultado
6 11
Durante a primeira chamada de função, o valor de c é inicializado em 1. Seu valor é aumentado em 5. Agora, o valor de c é 6, que é impresso na tela.
Durante a segunda chamada de função, c não é inicializado com 1 novamente. É porque c é uma variável estática. O valor c é acrescido de 5. Agora, seu valor será 11, que está impresso na tela.