Fácil C

Contador com static local

Enunciado

Crie uma função int proximo(void) que retorne números sequenciais (1, 2, 3, ...) a cada chamada, usando uma variável static local. No main, chame a função 5 vezes e imprima os valores.

Requisitos

  • A função proximo deve usar uma variável static local.
  • O programa deve imprimir os números de 1 a 5, um por linha.
  • Não use variáveis globais.

Código inicial

#include <stdio.h>

int proximo(void) {
    // complete aqui
}

int main(void) {
    for (int i = 0; i < 5; i++) {
        printf("%d\n", proximo());
    }
    return 0;
}

Saída esperada

1
2
3
4
5
Ver dica

Declare a variável como static int contador = 0; dentro da função e incremente antes de retornar.

Mostrar solução
#include <stdio.h>

int proximo(void) {
    static int contador = 0; // inicializada uma única vez
    contador++;
    return contador;
}

int main(void) {
    for (int i = 0; i < 5; i++) {
        printf("%d\n", proximo());
    }
    return 0;
}

Passo a passo

  1. A função proximo declara static int contador = 0;. A palavra static faz com que a variável seja criada e inicializada apenas uma vez, antes da primeira chamada.
  2. A cada chamada, contador++ incrementa o valor armazenado na memória estática.
  3. O return contador devolve o valor atualizado.
  4. No main, o laço chama proximo cinco vezes e imprime cada retorno.
  5. Como contador é static, seu valor persiste entre as chamadas, gerando a sequência 1, 2, 3, 4, 5.

Por que funciona

Variáveis locais comuns são destruídas ao final da função. Já uma variável static local tem tempo de vida igual ao do programa, mas escopo restrito ao bloco da função. Isso permite manter estado entre chamadas sem expor a variável globalmente.

Erros comuns

  • Esquecer o static: int contador = 0; reinicializa a cada chamada, sempre retornando 1.
  • Inicializar com valor diferente de zero: static int contador = 5; começa em 5, não em 1.
  • Tentar acessar contador fora da função: erro de compilação, pois o escopo é local.

Outra forma de resolver

Usar uma variável global int contador = 0; e incrementá-la na função. É preferível quando várias funções precisam compartilhar o mesmo contador, mas expõe a variável a todo o arquivo.

Saída esperada

1
2
3
4
5