Entendendo Regras de Escopo em C: Variáveis Locais, Globais e Formais
Um escopo em qualquer programação é uma região do programa onde uma variável definida pode ter sua existência e além disso a variável não pode ser acessada. Existem três lugares onde variáveis podem ser declaradas na linguagem de programação C:
Dentro de uma função ou bloco, o que é chamado de variáveis locais.
Fora de todas as funções, o que é chamado de variáveis globais.
Na definição de parâmetros de função, que são chamados de parâmetros formais.
Vamos entender o que são variáveis locais e globais, e parâmetros formais.
Variáveis Locais
Variáveis declaradas dentro de uma função ou bloco são chamadas de variáveis locais. Elas podem ser usadas apenas por instruções que estão dentro dessa função ou bloco de código. Variáveis locais não são conhecidas por funções fora das suas próprias. O exemplo a seguir mostra como variáveis locais são usadas. Aqui todas as variáveis a, b e c são locais à função main().
Live Demo#include <stdio.h>
int main() {
/* declaração de variável local */
int a, b;
int c;
/* inicialização real */
a = 10;
b = 20;
c = a + b;
printf("valor de a = %d, b = %d e c = %d\n", a, b, c);
return 0;
}
Variáveis Globais
Variáveis globais são definidas fora de uma função, geralmente no topo do programa. Variáveis globais mantêm seus valores durante toda a vida do seu programa e podem ser acessadas dentro de qualquer uma das funções definidas para o programa.
Uma variável global pode ser acessada por qualquer função. Ou seja, uma variável global está disponível para uso em todo o seu programa após sua declaração. O programa a seguir mostra como variáveis globais são usadas em um programa.
Live Demo#include <stdio.h>
/* declaração de variável global */
int g;
int main() {
/* declaração de variável local */
int a, b;
/* inicialização real */
a = 10;
b = 20;
g = a + b;
printf("valor de a = %d, b = %d e g = %d\n", a, b, g);
return 0;
}
Um programa pode ter o mesmo nome para variáveis locais e globais, mas o valor da variável local dentro de uma função terá preferência. Aqui está um exemplo:
Live Demo#include <stdio.h>
/* declaração de variável global */
int g = 20;
int main() {
/* declaração de variável local */
int g = 10;
printf("valor de g = %d\n", g);
return 0;
}
Quando o código acima é compilado e executado, produz o seguinte resultado:
valor de g = 10
Parâmetros Formais
Parâmetros formais são tratados como variáveis locais dentro de uma função e têm precedência sobre variáveis globais. Segue um exemplo:
Live Demo#include <stdio.h>
/* declaração de variável global */
int a = 20;
int main() {
/* declaração de variável local na função main */
int a = 10;
int b = 20;
int c = 0;
printf("valor de a em main() = %d\n", a);
c = sum(a, b);
printf("valor de c em main() = %d\n", c);
return 0;
}
/* função para adicionar dois inteiros */
int sum(int a, int b) {
printf("valor de a em sum() = %d\n", a);
printf("valor de b em sum() = %d\n", b);
return a + b;
}
Quando o código acima é compilado e executado, produz o seguinte resultado:
valor de a em main() = 10 valor de a em sum() = 10 valor de b em sum() = 20 valor de c em main() = 30
Inicializando Variáveis Locais e Globais
Quando uma variável local é definida, ela não é inicializada pelo sistema, você deve inicializá-la você mesmo. Variáveis globais são inicializadas automaticamente pelo sistema quando você as define da seguinte forma:
| Tipo de Dado | Valor Padrão Inicial |
|---|---|
| int | 0 |
| char | '\0' |
| float | 0 |
| double | 0 |
| ponteiro | NULL |
É uma boa prática de programação inicializar variáveis corretamente, caso contrário seu programa pode produzir resultados inesperados, porque variáveis não inicializadas pegarão algum valor lixo já disponível em sua localização de memória.
Linguagem C
- Regras Principais para Circuitos em Série: Corrente, Resistência e Tensão
- Fundamentos de Circuitos Paralelos: Regras de Tensão, Resistência e Corrente
- Regras Essenciais de Derivação: Referência Rápida
- Regras Fundamentais de Antiderivação: Constantes, Somas e Diferenças
- Domine Variáveis e Tipos de Dados Primitivos em C#: Guia Completo
- Entendendo Escopo de Variáveis em C#: Níveis de Classe, Método e Bloco
- Dominando Variáveis, Literais e Constantes em C++: Guia Completo
- Variáveis, Constantes e Literais em C: Um Guia Completo
- Entendendo Classes de Armazenamento em C: Escopo, Tempo de Vida e Performance
- Variáveis e Literais em Java: Guia Completo