Quando uma função é chamada em um programa em C, o fluxo de execução é temporariamente desviado para essa função. A partir desse momento, o programa executa as instruções definidas nela. Quando a função termina, o controle retorna ao ponto exato em que a chamada foi realizada, e a execução do programa continua normalmente.
Esse comportamento é essencial para entendermos como os programas em C são organizados e como as variáveis se comportam ao longo da execução.
https://www.youtube.com/watch?v=NZB-Yu_Q6TY
Um conceito muito importante nesse contexto é o de escopo. De forma geral, o escopo determina em que parte do programa uma variável pode ser acessada. Em C, a visibilidade de uma variável depende do local em que ela foi declarada.
De maneira introdutória, podemos destacar três situações bastante comuns: variáveis declaradas em blocos, em funções e no escopo global do arquivo.
Uma variável declarada dentro de um bloco só pode ser utilizada dentro desse mesmo bloco. Em C, blocos são trechos de código delimitados por chaves {}.
Por exemplo:
if(condicao){
int menor;
}
Nesse caso, a variável menor existe apenas dentro do bloco do if. Fora dele, ela não pode ser acessada.
Isso significa que o código abaixo seria inválido:
if(condicao){
int menor = 10;
}
printf("%d\n", menor); // erro
A variável menor deixa de existir ao final do bloco em que foi declarada.
Quando uma variável é declarada dentro de uma função, ela só pode ser acessada no interior dessa função. O mesmo vale, em geral, para os parâmetros recebidos pela função: eles também pertencem ao escopo local da função.
Veja o exemplo:
#include <stdio.h>
int soma(int a, int b){
int var;
var = a + b;
return var;
}
int main(){
int x = 3, y = 5;
printf("%d\n", soma(x, y));
return 0;
}
Nesse exemplo: