Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Regla 0x0103h: Las constantes (const o #define) deben nombrarse en MAYUSCULAS_SNAKE_CASE

Nomenclatura e identificadores (0x01XX)

Universidad Nacional de Río Negro

0x0103h: Las constantes (const o #define) deben nombrarse en MAYUSCULAS_SNAKE_CASE

Enunciado normativo

DEBE nombrarse en MAYUSCULAS_SNAKE_CASE todo valor inmutable declarado con const o mediante #define. NO DEBE usarse minúsculas ni camelCase para constantes.

Las mayúsculas funcionan como señal visual de inmutabilidad.

¿Por qué existe esta regla?

El problema

En C un valor puede cambiar o no, pero la sintaxis no lo grita. Cuando una constante se ve igual que una variable, nada impide que un lector intente modificarla o que un mantenedor la cambie creyendo que era mutable. La convención de mayúsculas convierte la inmutabilidad en información visible de un vistazo.

Distinguir además #define de const importa: la macro no ocupa memoria ni tiene tipo, la const sí. El catálogo separa ambas formas para poder diagnosticarlas por separado.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
CompilaciónNinguna: la capitalización no afecta la semántica.
Bug silenciosoUn valor que parecía variable se modifica por error en otro punto.
LegibilidadNo se distingue a simple vista qué valores son parámetros del sistema.
MantenibilidadCambiar el valor de referencia exige buscarlo creyendo que es local.
ConsistenciaConviven constantes en mayúsculas y en minúsculas.

Fundamento en el estándar y en la cátedra

El estándar distingue objetos const (no modificables, §6.7.3) de macros del preprocesador (§6.10.3) sin imponer capitalización. La cátedra adopta MAYUSCULAS_SNAKE_CASE por convención universal en C y la aplica tanto a const como a #define para que una sola regla visual cubra ambos.

Alcance y excepciones

Aplica a constantes locales y globales, incluidas las de alcance de función. Las macros de función también se nombran en mayúsculas (0x0107h: Las macros #define deben nombrarse en MAYUSCULAS_SNAKE_CASE). No alcanza a variables mutuas ni a parámetros. Un const de tipo puntero se nombra igual en mayúsculas, independientemente de dónde esté el const.

Ejemplos exhaustivos

❌ Contraejemplo 1 — Macro y constante en minúsculas

#define buffer_max 1024
const int diasSemana = 7;

Por qué falla: nada distingue estos valores inmutables de una variable; el lector puede intentar asignarlos.

❌ Contraejemplo 2 — Constante local camuflada de variable

static double calcular_area(double radio)
{
    const double pi = 3.141592653589793;
    return pi * radio * radio;
}

Por qué falla: pi parece una variable local; además 0x0101h: Los identificadores deben ser descriptivos pide un nombre que exprese el rol y PI en mayúsculas lo identifica como parámetro fijo del cálculo.

✅ Ejemplo conforme 1 — Constante simbólica

#define BUFFER_MAX 1024
const int DIAS_SEMANA = 7;
const int ALICUOTA_IVA = 21;

Justificación: el nombre en mayúsculas anuncia que el valor es un parámetro del sistema y no debe reasignarse.

✅ Ejemplo conforme 2 — Constante local en contexto

static double calcular_area(double radio)
{
    const double PI = 3.141592653589793;

    return PI * radio * radio;
}

Justificación: la inmutabilidad de PI queda a la vista y su nombre expresa el dominio, no la variable.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
Revisión manualconst o #define con nombre en minúsculas.
gaffgaff check archivo.cReglas 0x0103h, 0x0107h y 0x010Dh sobre constantes.
grepgrep -nE 'const .*[a-z]' archivo.cPosibles constantes mal nombradas.

Checklist de autocontrol

Reglas relacionadas