Curso Introdução à Programação
Escopo de Variáveis
Nesta aula vamos aprender o que é o escopo de variáveis, abordando os seguintes temas:
- O que é o escopo de uma variável?
- Escopo local
- Escopo global
- Prioridade
O que é o escopo de uma variável?
O escopo de uma variável representa os limites dentro dos quais uma variável está definida.
Isso significa que uma variável pode estar definida em um trecho do código e não estar definida em outro trecho.
Escopo local
Para facilitar a explicação, analise o seguinte código:
#include <stdio.h>
int aux(){
int a = 9;
int b = 123;
}
int main(){
int a = 4;
}
Perceba que, no código acima, a declaração de
Ao declarar
Da mesma forma, a variável
Tendo isso em vista, analise a saída do código abaixo:
#include <stdio.h>
int aux(){
int a = 9;
int b = 123;
// imprime os valores das variaveis a e b contidas na funcao aux
printf("aux -> %d %d\n", a, b);
}
int main(){
int a = 4;
// imprime o valor da variavel a contida na funcao main
printf("Main -> %d\n", a);
// chama a funcao aux
aux();
}
/* Saída:
Main -> 4
aux -> 9 123
*/
Observações:
Se, no código acima, tivéssemos tentado acessar a variável
dentro da função main, o Code::Blocks iria nos alertar, avisando que não foi declarado. Estruturas if, else, while, dentre outras, também apresentam escopo local. Ou seja, uma variável declarada dentro de um loop while só existe e pode ser acessada dentro dessa estrutura.
Tendo aprendido isso, podemos entender o que são os parâmetros das funções.
Os parâmetros que são passados para uma função representam variáveis locais que devem ser inicializadas logo na chamada desta função.
Para facilitar o entendimento, analise o código abaixo:
#include <stdio.h>
int soma(int a, int b){
return a+b;
}
int main(){
printf("%d\n", soma(2, 5));
}
/* Saída:
7
*/
No código acima, as variáveis
Portanto, ao chamar a função, devemos incluir seus parâmetros, pois ela necessita deles. Caso não os informemos, o Code::Blocks nos alertará com um erro.
Escopo global
Variáveis de escopo global existem e podem ser acessadas em qualquer trecho do programa.
Estas variáveis devem ser declaradas fora de qualquer função.
Exemplo:
#include <stdio.h>
int global = 1; // declaracao da variavel global com valor 1
int aux(){
printf("%d\n", global); // imprime o valor da variavel global
global = 3; // altera o valor da variavel global para 3
}
int main(){
printf("%d\n", global); // imprime o valor da variavel global
global = 2; // altera o valor da variavel global para 2
aux(); // chama a funcao aux
printf("%d\n", global); // imprime o valor da variavel global
}
/* Saída:
1
2
3
*/
Prioridade
Em C, variáveis locais têm maior prioridade que as globais.
Para facilitar o entendimento, analise o código abaixo:
#include <stdio.h>
int var = 7;
int aux(){
int var = 9;
printf("%d\n", var);
}
int main(){
printf("%d\n", var);
aux();
printf("%d\n", var);
}
/* Saída:
7
9
7
*/
No código acima, tivemos a declaração da variável var tanto no escopo global quanto no escopo local da função aux.
Ao executar o primeiro comando printf da main, o programa imprimiu o valor
Ao chamar a função aux, uma variável local var é declarada com valor
Ao voltar para a main, o segundo comando printf é executado e imprime o valor
Observação: perceba que se não tivéssemos incluído o tipo (int) antes do nome var na função aux, não estaríamos declarando uma nova variável, mas alterando o valor da já existente:
#include <stdio.h>
int var = 7;
int aux(){
var = 9;
printf("%d\n", var);
}
int main(){
printf("%d\n", var);
aux();
printf("%d\n", var);
}
/* Saída:
7
9
9
*/
Escopo de variáveis pode ser um pouco confuso à primeira vista, mas você vai pegar o jeito naturalmente a medida que você resolver mais execícios.
Até a próxima aula!