Funções e escopo de variáveis

Por: Eduardo Casavella
Chamamos de escopo de variável ao conjunto de regras que determinam a utilização de uma variável em um programa

Podemos dividir as variáveis quanto ao escopo em três tipos:
variáveis locais, parâmetros formais e variáveis globais.

Variáveis locais

  • São aquelas declaradas dentro do bloco de uma função.
  • Não podem ser usadas ou modificadas por outras funções.
  • Somente existem enquanto a função onde foi declarada estiver sendo executada.

Parâmetros formais

  • Os parâmetros formais de uma função também são variáveis locais da função.

Variáveis Globais

  • São declaradas fora de todos os blocos de funções.
  • São acessíveis em qualquer parte do programa, ou seja, podem ser usadas e modificadas por todas as- outras funções.
  • Existem durante toda a execução do programa.

Escopo de variáveis

#include <stdio.h>
#include <conio.h>

//declaração de variáveis globais


// ---------------- Funçao main()-------------------
int main(void)
{        
  //declaração das variáveis locais da main()
   
   return(0);
}
// -------------------------------------------------


void funcao1(variáveis locais de parâmetros) 
{
   // declaração das variáveis locais da função1
   
   return;
}

 


//Exemplo de programa com variáveis globais e locais.
#include<stdio.h>
#include<conio.h>

//declaração de variáveis globais
float media, nota1, nota2;

//protótipo da função entrada
void entrada(void);

// ---------------- funçao main()-------------------
int main(void)
{
  //variável local
  char resposta;

  do
  {

    //chamada da função p/ entrada das notas
    entrada();

    //usando variáveis globais: media,nota1,nota2
    media = (nota1 + nota2) / 2;

    printf("\nMedia do aluno: %.2f\n", media);

    printf("\nDeseja calcular outra media? (s/n)");
    fflush(stdin);
    scanf("%c",&resposta);
  }
  while(resposta == 's');

   return(0);
}
// --------- fim da função main() -----

//função entrada de dados
//usa as variáveis globais nota1 e nota2
void entrada(void)
{
  printf("\nDigite a primeira nota: ");
  scanf("%f", &nota1);

  printf("Digite a segunda nota: ");
  scanf("%f", &nota2);

  return;
}

 

Tela de Execução

tela de execução escopo de variaveis

Tela de execução de escopo de variáveis

 

Perguntas frequentes:

Podem existir variáveis locais e globais com o mesmo nome?

Sim. Caso isto ocorra, as variáveis irão se comportar como variáveis diferentes, embora possuam o mesmo nome.

Nota: por uma questão de clareza na escrita do código, a prática de nomear variáveis globais e locais com o mesmo nome não é recomendada.

Supondo que exista uma variável local e uma global com o mesmo nome, qual prevalece?

Prevalece sempre a variável local.
As variáveis declaradas dentro da função main() são locais à mesma, pois embora seja uma função especial main não deixa de ser uma função. É muito comum programadores iniciantes confundirem as variáveis declaradas na main() com variáveis globais. Isto é um erro conceitual. Para ser global a variável tem que ser declarada fora do bloco de qualquer outra função, inclusive fora da main().
Até a proxima!