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;
	...
}
void 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 e 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 é  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);
}

Página Anterior Índice da Aula Próxima Página


Curso de C do CPDEE/UFMG - 1996 - 1999