C - Regras de Escopo
Um escopo em qualquer programação é uma região do programa onde uma variável definida pode ter sua existência e além dessa variável ela não pode ser acessada. Existem três lugares onde as variáveis podem ser declaradas na linguagem de programação C -
Dentro de uma função ou bloco que é chamado local variáveis.
Fora de todas as funções que são chamadas global variáveis.
Na definição dos parâmetros da função que são chamados formal parâmetros.
Vamos entender o que são local e global variáveis, e formal parâmetros.
Variáveis Locais
As variáveis que são declaradas dentro de uma função ou bloco são chamadas de variáveis locais. Eles podem ser usados 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. O exemplo a seguir mostra como as variáveis locais são usadas. Aqui, todas as variáveis a, b e c são locais para a função main ().
#include <stdio.h>
int main () {
/* local variable declaration */
int a, b;
int c;
/* actual initialization */
a = 10;
b = 20;
c = a + b;
printf ("value of a = %d, b = %d and 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 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 programa após sua declaração. O programa a seguir mostra como as variáveis globais são usadas em um programa.
#include <stdio.h>
/* global variable declaration */
int g;
int main () {
/* local variable declaration */
int a, b;
/* actual initialization */
a = 10;
b = 20;
g = a + b;
printf ("value of a = %d, b = %d and 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 -
#include <stdio.h>
/* global variable declaration */
int g = 20;
int main () {
/* local variable declaration */
int g = 10;
printf ("value of g = %d\n", g);
return 0;
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
value of g = 10
Parâmetros Formais
Os parâmetros formais são tratados como variáveis locais em uma função e têm precedência sobre as variáveis globais. A seguir está um exemplo -
#include <stdio.h>
/* global variable declaration */
int a = 20;
int main () {
/* local variable declaration in main function */
int a = 10;
int b = 20;
int c = 0;
printf ("value of a in main() = %d\n", a);
c = sum( a, b);
printf ("value of c in main() = %d\n", c);
return 0;
}
/* function to add two integers */
int sum(int a, int b) {
printf ("value of a in sum() = %d\n", a);
printf ("value of b in sum() = %d\n", b);
return a + b;
}
Quando o código acima é compilado e executado, ele produz o seguinte resultado -
value of a in main() = 10
value of a in sum() = 10
value of b in sum() = 20
value of c in 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 maneira -
Tipo de dados | Valor inicial padrão |
---|---|
int | 0 |
Caracteres | '\ 0' |
flutuador | 0 |
Duplo | 0 |
ponteiro | NULO |
É uma boa prática de programação inicializar as variáveis adequadamente, caso contrário, seu programa pode produzir resultados inesperados, porque as variáveis não inicializadas levarão algum valor de lixo já disponível em seu local de memória.