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.

Escopo de bloco

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.

Escopo de função

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: