AnyCompiler

const y static

static, usado en una variable local, significa que se inicializa solo una vez y mantiene su valor entre llamadas — a diferencia de una variable local normal, que se recrea desde cero cada vez que se ejecuta su función.

#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: una promesa que el compilador hace cumplir

const marca una variable como inmodificable después de la inicialización — y a diferencia de un comentario o una convención de nombres, el compilador realmente la hace cumplir. Esto es genuinamente lo que gcc reporta — capturado de una ejecución real, no escrito para parecer plausible:

#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 continuación: manejo de errores en C — por qué no hay exceptions, y la convención de código de retorno que C usa en su lugar.

Practice exercise

Escribe una función increment() con un static int count que empiece en 0, le sume 1 y lo imprima. Llama a increment() tres veces.