Escopo de variáveis

Em C++, o escopo de uma variável determina onde ela pode ser acedida e utilizada dentro do programa. O escopo é o contexto em que um nome (como o de uma variável) é visível e válido para uso.

Tipos de escopo em C++

Os principais tipos de escopo de variáveis em C++ são:

Escopo local:
Uma variável declarada dentro de uma função ou bloco (delimitado por {}) só existe e pode ser usada dentro desse bloco. Ao sair do bloco, a variável é destruída e seu valor é perdido.

void exemplo() {

int x = 10; // x só existe dentro desta função

}

Variáveis locais são úteis para armazenar dados temporários e evitar conflitos de nomes.

Escopo global:
Variáveis declaradas fora de qualquer função, classe ou bloco são globais. Elas podem ser acedidas de qualquer lugar do ficheiro após a sua declaração.

int y = 20; // variável global

int main() {

cout << y << endl; // acesso permitido return 0;

}

Use variáveis globais apenas quando necessário, pois seu uso excessivo pode dificultar a manutenção e depuração do código.

Escopo de bloco:
Uma variável declarada dentro de um bloco {} (por exemplo, dentro de um laço ou condicional) só é visível dentro desse bloco.

if (true) {

int z = 5; cout << z << endl; // ok

}

// cout << z << endl; // erro: z não existe aqui

Escopo de classe:
Variáveis declaradas dentro de uma classe são chamadas de membros e têm escopo de classe. Elas podem ser acedidas por métodos da própria classe e, dependendo do modificador de acesso, por outras partes do programa.

Escopo de namespace:
Variáveis declaradas dentro de um namespace ficam visíveis do ponto de declaração até o final do namespace e podem ser acedidas usando o operador de resolução de escopo ::.

Exemplos práticos

#include <iostream>
using namespace std;

int globalVar = 100; // escopo global

void funcao() {
int localVar = 10; // escopo local
cout << "Local: " << localVar << endl;
cout << "Global: " << globalVar << endl;
}

int main() {
funcao();
// cout << localVar << endl; // erro: localVar não existe aqui
cout << "Global no main: " << globalVar << endl;
return 0;
}

Observações importantes

  • Variáveis com o mesmo nome podem existir em escopos diferentes sem conflito, pois cada uma é visível apenas em seu próprio contexto.
  • O escopo também determina o tempo de vida da variável: variáveis locais são criadas e destruídas a cada execução do bloco, enquanto globais existem durante toda a execução do programa.
  • Evite variáveis globais quando possível, prefira escopos mais restritos para evitar erros e tornar o código mais seguro e organizado.