Junior
Quando e por quanto tempo existem variáveis globais e locais em C++?
sobes.tech IA
Resposta da IA
Variáveis globais
- Tempo de existência: Desde o início do programa até à sua finalização.
- Local de armazenamento: Normalmente na área de memória estática (.data ou secção .bss do ficheiro executável).
- Inicialização:
- As variáveis globais não estáticas, definidas ao nível do ficheiro, com construtores não triviais, são inicializadas antes da chamada a
main(). - As variáveis globais com inicialização a zero (por exemplo, int i = 0;) também são inicializadas antes de
main(). - As variáveis definidas com
constou com duração de armazenamento estático são inicializadas ao carregar o programa.
- As variáveis globais não estáticas, definidas ao nível do ficheiro, com construtores não triviais, são inicializadas antes da chamada a
- Disponibilidade: São visíveis em todas as funções dentro do âmbito.
Variáveis locais
- Tempo de existência: Desde a definição da variável dentro de um bloco de código (função, ciclo, condicional, etc.) até à saída desse bloco.
- Local de armazenamento: Normalmente na pilha (para variáveis automáticas). As variáveis locais estáticas são armazenadas na área de memória estática.
- Inicialização:
- As variáveis locais automáticas não são inicializadas por defeito (contêm "sujeira"). Requerem inicialização explícita.
- As variáveis locais estáticas são inicializadas uma vez na sua primeira declaração.
- Disponibilidade: Apenas são visíveis dentro do bloco de código onde são definidas.
Exemplos
// Variável global
int global_variable = 10;
void some_function() {
// Variável local (automática)
int local_variable_1; // Não inicializada
// Variável local (automática) com inicialização
int local_variable_2 = 20;
// Variável local estática
static int static_local_variable = 30; // Inicializa-se uma vez
// Acesso à variável global
global_variable++;
// Acesso às variáveis locais
local_variable_1 = global_variable;
static_local_variable++;
// Após sair de some_function(), local_variable_1 e local_variable_2 deixam de existir
// static_local_variable continua a existir, mantendo o seu valor
}
int main() {
some_function();
some_function(); // static_local_variable manteve o valor
// A variável global está disponível aqui
// local_variable_1 e local_variable_2 não estão acessíveis
return 0;
}
Tabela de comparação
| Característica | Variáveis globais | Variáveis locais (automáticas) | Variáveis locais estáticas |
|---|---|---|---|
| Tempo de existência | Desde o início do programa até à sua finalização | Desde a definição até à saída do bloco de código | Desde a primeira declaração até à finalização do programa |
| Local de armazenamento | Área de memória estática (.data, .bss) | Pilha | Área de memória estática (.data, .bss) |
| Inicialização | Antes de chamar main() ou ao carregar o programa |
Não inicializadas por defeito. Requerem inicialização explícita | Uma vez na primeira declaração |
| Disponibilidade | Em todo o âmbito do ficheiro | Apenas dentro do bloco de código | Apenas dentro do bloco de código |