CURSO DE C
Escopo de Variáveis
Já
foi dada uma introdução ao escopo de variáveis.
O escopo é o conjunto de regras que determinam o uso e a validade
de variáveis nas diversas partes do programa.
Variáveis locais
O primeiro tipo de variáveis que veremos são as variáveis
locais. Estas são aquelas que só têm validade dentro
do bloco no qual são declaradas. Sim. Podemos declarar variáveis
dentro de qualquer bloco. Só para lembrar: um bloco começa
quando abrimos uma chave e termina quando fechamos a chave. Até
agora só tínhamos visto variáveis locais para funções
completas. Mas um comando for
pode ter variáveis locais e que não serão conhecidas
fora dali. A declaração de variáveis locais é
a primeira coisa que devemos colocar num bloco. A característica
que torna as variáveis locais tão importantes é justamente
a de serem exclusivas do bloco. Podemos ter quantos blocos quisermos com
uma variável local chamada x, por exemplo, e elas não
apresentarão conflito entre elas.
A palavra reservada do C auto
serve para dizer que uma variável é local. Mas não
precisaremos usá- la pois as variáveis declaradas dentro
de um bloco já são consideradas locais.
Abaixo vemos um exemplo de variáveis locais:
func1 (...)
{
int abc,x;
...
}
func (...)
{
int abc;
...
}
main ()
{
int a,x,y;
for (...)
{
float a,b,c;
...
}
...
}
No programa acima temos três funções. As variáveis
locais de cada uma delas não irão interferir com as variáveis
locais de outras funções. Assim, a variável abc
de func1() não tem nada a ver (e pode ser tratada independentemente)
com a variável abc de func2(). A variável x
de func1() é também completamente independente da
variável x de main(). As variáveis a,
b e c são locais ao bloco for.
Isto quer dizer que só são conhecidas dentro deste bloco
for
e são desconhecidas no resto da função main().
Quando usarmos a variável a dentro do bloco for
estaremos usando a variável a local ao for
en não a variável a da função main().
Parâmetros formais
O segundo tipo de variável que veremos são os parâmetros
formais. Estes são declarados como sendo as entradas de uma função.
Não há motivo para se preocupar com o escopo deles. É
fácil: o parâmetro formal é como se fosse uma variável
local da função. Você pode também alterar o
valor de um parâmetro formal, pois esta alteração não
terá efeito na variável que foi passada à função.
Isto tem sentido, pois quando o C passa parâmetros para uma função,
são passadas apenas cópias das variáveis. Isto é,
os parâmetros formais existem independentemente das variáveis
que foram passadas para a função. Eles tomam apenas uma cópia
dos valores passados para a função.
Variáveis globais
Variáveis globais são declaradas, como já sabemos,
fora de todas as funções do programa. Elas são conhecidas
e podem ser alteradas por todas as funções do programa. Quando
uma função tem uma variável local com o mesmo nome
de uma variável global a função dará preferência
à variável local. Vamos ver um exemplo:
int z,k;
func1 (...)
{
int x,y;
...
}
func2 (...)
{
int x,y,z;
...
z=10;
...
}
main ()
{
int count;
...
}
No exemplo acima as variáveis z e k são globais.
Veja que func2() tem uma variável local chamada z.
Quando temos então, em func2(), o comando z=10 quem
recebe o valor de 10 é a variável local, não
afetando o valor da variável global z.
Evite ao máximo o uso de variáveis globais.
Elas ocupam memória o tempo todo (as locais só ocupam memória
enquanto estão sendo usadas) e tornam o programa mais difícil
de ser entendido e menos geral.
AUTO AVALIAÇÃO
Veja como você está.
Estude o seguinte programa e aponte o valor de cada variável sempre que solicitado:
#include <stdio.h>
int num;
int func(int a, int b)
{
a = (a+b)/2; /* Qual e o valor de a apos a atribuicao? */
num -= a;
return a;
}
main()
{
int first = 0, sec = 50;
num = 10;
num += func(first, sec); /* Qual e o valor de num, first e sec */
/* antes e depois da atribuicao? */
printf("\n\nConfira! num = %d\tfirst = %d\tsec = %d",num, first, sec);
}
Dúvidas? De uma olhadinha em nossoFAQ