const e static
static, usado em uma variável local, significa que ela é inicializada apenas uma vez e mantém seu valor entre chamadas — diferente de uma variável local normal, que é recriada do zero toda vez que sua function roda.
main.c
Teste você mesmo →#include <stdio.h>
void increment() {
static int count = 0;
count++;
printf("%d\n", count);
}
int main() {
increment();
increment();
increment();
return 0;
}Output
1 2 3
const: uma promessa que o compilador faz cumprir
const marca uma variável como inalterável depois da inicialização — e diferente de um comentário ou uma convenção de nomenclatura, o compilador realmente a faz cumprir. Isso é genuinamente o que o gcc relata — capturado de uma execução real, não escrito para parecer plausível:
main.c
Teste você mesmo →#include <stdio.h>
int main() {
const int max = 100;
max = 200;
printf("%d\n", max);
return 0;
}Output
main.c: In function ‘main’:
main.c:5:9: error: assignment of read-only variable ‘max’
5 | max = 200;
| ^A seguir: tratamento de erros em C — por que não há exceptions, e a convenção de código de retorno que o C usa em vez disso.
Practice exercise
Escreva uma function increment() com um static int count que comece em 0, some 1 a ele e o imprima. Chame increment() três vezes.