¿Qué es const en C? Guía completa con ejemplos prácticos

1. ¿Qué es const en C?

Al programar en C, el uso de la palabra clave const resulta útil para evitar que el valor de una variable cambie por error. const declara: “¡este valor no se puede modificar!”, lo que significa que, una vez asignado, no podrá cambiarse posteriormente.

Por ejemplo, observa el siguiente código:

const int x = 10;
x = 20;  // ¡Error!

De este modo, const fija el valor de x e impide que se modifique por accidente. Es como detener a la variable cuando quiere “liberarse”, garantizando la estabilidad del programa.

2. ¿Por qué deberías usar const?

2.1 Aumenta la seguridad del código

Con const, reduces el riesgo de que ciertos valores o datos sean modificados accidentalmente. Por ejemplo, si cambias por error un valor crítico de configuración, todo el programa puede volverse inestable. Usar const previene este problema.

2.2 Beneficios de la optimización del compilador

Al marcar un valor como inmutable, el compilador sabe que “este valor no cambiará” y puede optimizar el código de forma más eficiente. En muchos casos, las variables const se almacenan en caché, mejorando el rendimiento cuando se usan con frecuencia.

2.3 Mejora la legibilidad y el trabajo en equipo

El uso de const es una buena práctica para la legibilidad. En un entorno de desarrollo colaborativo, deja claro que “este valor no se modifica”, evitando errores cuando otros programadores trabajen con el mismo código.

3. Punteros y const: comprendiendo la relación

La combinación de punteros y const puede resultar confusa en C. Dependiendo de la posición de const, cambia el comportamiento del puntero y del valor que apunta:

  • const int *p;
    Aquí, el valor apuntado por p (*p) no puede cambiarse, pero el puntero sí puede apuntar a otra dirección.
  • int *const p;
    En este caso, el puntero no puede cambiar de dirección, pero el valor al que apunta (*p) sí puede modificarse.
  • const int *const p;
    Aquí, ni el puntero ni el valor apuntado pueden cambiarse: es un estado de “¡absolutamente inmutable!”.

Los punteros son potentes, pero también propensos a errores. Por ello, presta atención a la ubicación de const.

4. Ejemplos prácticos de uso de const

4.1 Uso en argumentos de funciones

Cuando pasas arreglos o punteros a una función y no quieres que se modifiquen, utiliza const. Así, proteges los datos originales:

void printArray(const int arr[], int size) {
    for (int i = 0; i < size; i++) {
        printf("%d ", arr[i]);
    }
    printf("\n");
}

Esto asegura que el arreglo solo se lea dentro de la función.

4.2 Uso en tablas de búsqueda (lookup tables)

En datos fijos que no deben cambiar durante la ejecución, como una tabla de búsqueda, const es la mejor opción. Ejemplo:

const char *days[] = {"Monday", "Tuesday", "Wednesday"};

De esta forma, garantizas que los datos se mantengan estables y sin riesgo de modificación.

5. Malos usos y precauciones con const

5.1 Ejemplo de uso incorrecto

Un mal uso de const puede generar errores de compilación. Ejemplo:

void modifyArray(const int arr[], int size) {
    arr[0] = 10;  // ¡Error de compilación!
}

En este caso, el arreglo fue declarado como const, por lo que sus elementos no pueden modificarse.

5.2 Precauciones con cast y const

Es posible eliminar la restricción con const_cast, pero conlleva riesgos serios: puede causar comportamientos indefinidos y depender del sistema. En general, lo recomendable es evitarlo y respetar la inmutabilidad declarada por const.

6. Conclusión

El uso de const en C es clave para mejorar la seguridad, optimizar el rendimiento y prevenir errores. Aplicarlo correctamente en variables, punteros y funciones garantiza mayor estabilidad en el programa.

La próxima vez que escribas código en C, prueba a incluir const. Seguro encontrarás más lugares donde puede ayudarte a escribir un código más sólido y confiable.

侍エンジニア塾