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
proximodeve usar uma variávelstaticlocal. - 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
- A função
proximodeclarastatic int contador = 0;. A palavrastaticfaz com que a variável seja criada e inicializada apenas uma vez, antes da primeira chamada. - A cada chamada,
contador++incrementa o valor armazenado na memória estática. - O
return contadordevolve o valor atualizado. - No
main, o laço chamaproximocinco vezes e imprime cada retorno. - 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
contadorfora 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