AnyCompiler

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.

#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:

#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.