Aula 10: Escopo das variáveis
Gerenciando dados em um programa
Escopo é a propriedade que determina onde uma variável pode ser utilizada como um identificador em um programa.
Uma variável declarada em uma função é normalmente local; o contexto define o escopo. Mas você também pode declarar o escopo de um identificador explicitamente, utilizando uma palavra reservada de classe de armazenamento de C. Classe de armazenamento de uma variável determina onde é armazenada.
Classes de armazenamento
As mais importantes classes de armazenamento em C são representadas pelas palavras reservadas auto, static e extern.
Uma variável auto é local para a função onde está definida. Como esta é a classe de armazenamento normal para uma variável definida dentro de uma função, a palavra reservada auto é sempre opcional, e raramente utilizada na prática.
Uma variável static definida dentro de uma função é também local em utilização, mas retém seu valor de uma chamada de função para a próxima.
Uma variável extern está definida fora de qualquer função e está disponivel globalmente - para todas as funções localizadas abaixo da declaração da variável. Geralmente se omite a declaração de classe externa para as variáveis globais, por considerá-la redundante.
Qualquer uma dessas palavras reservadas de classe de armazenamento pode aparecer como a primeira palavra reservada em uma declaração.
Utilizando variáveis estáticas
Você poderá algumas vezes querer projetar uma função que retenha o valor de algumas variáveis entre as chamadas da função.
Exemplo:
/* ex51.c utilização de variável estática */
#include < stdio.h> /* diretiva */
void classtest(void) /* indica o uso de função */
main() /* função principal */
int i; /* variável local */
for ( i= 1 ; i<+ 5 ; i+ + ) classtest();
void classtest(void) /* função secundária */
{ static int j = 1;
printf ("%d", j + +);
}
Uma repetição for na função main() do programa efetua cinco chamadas para uma função chamada classtest. Essa função define uma variável estática local chamada j, e atribui à variável um valor inicial 1. Cada vez que a função é chamada, ela mostra na tela o valor atual de j, e subseqüentemente incrementa o valor de 1.
Quando você compila e executa o programa, a seguinte saída aparece na tela:
1 2 3 4 5
Caso não usamos a palavra reservada static a saída seria:
1 1 1 1 1.
Utilizando variáveis externas
A finalidade de declarar um identificador externamente é tornar a variável disponível para um grupo de funções em vez de apenas para uma função. As variáveis declaradas antes da função main() são definidas como identificadores globais.
classtest();
void classtest(void) /* função secundária */
static int j = 1;
printf ("%d", j + +);
Exemplo:
/* ex52.c utilização de variável externa */
#include < stdio.h> /* diretiva */
void inittest(void); /* indica o uso de funções */
void incrtest(void);
void showtest(void);
int test; /* variável global */
main() /* função principal */
inittes();
incrtest();
showtest();
void inittest(void) /* funções secundárias */
test = 1;
void incrtest(void)
test + +;
void showtest(void)
printf ("test = %d\n", test);
O programa chama as três funções, sendo que cada uma executa uma operação envolvendo test.
A saída é: test = 2
Nenhuma das funções desse programa inclui uma declaração para test, mas as funções têm acesso à mesma variável.
Qualquer função pode utilizar ou alterar o valor que a variável contém.
![]() Voltar à HomePage |
![]() Ir para o topo da Página |
![]() Ir para a Aula 11 |
---|