Regla 0x0103h: Las constantes (const o #define) deben nombrarse en MAYUSCULAS_SNAKE_CASE
Nomenclatura e identificadores (0x01XX)
0x0103h: Las constantes (const o #define) deben nombrarse en MAYUSCULAS_SNAKE_CASE¶
Enunciado normativo¶
DEBE nombrarse en
MAYUSCULAS_SNAKE_CASEtodo valor inmutable declarado conconsto mediante#define. NO DEBE usarse minúsculas nicamelCasepara 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 consecuencia | Efecto concreto |
|---|---|
| Compilación | Ninguna: la capitalización no afecta la semántica. |
| Bug silencioso | Un valor que parecía variable se modifica por error en otro punto. |
| Legibilidad | No se distingue a simple vista qué valores son parámetros del sistema. |
| Mantenibilidad | Cambiar el valor de referencia exige buscarlo creyendo que es local. |
| Consistencia | Conviven 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¶
constde alcance de archivo: se nombra en mayúsculas aunque tenga enlace interno; no confundir con las globales mutables de 0x0106h: Las variables globales deben ser declaradas como static o usar prefijo g_.Tensor
consten parámetros:const int *describe solo lectura sobre el dato apuntado, no una constante; el nombre del puntero sigue la regla de variables.Conversión de unidades: una constante calculada también es inmutable y va en mayúsculas.
Cómo detectarla¶
| Herramienta | Comando | Señal |
|---|---|---|
| Revisión manual | — | const o #define con nombre en minúsculas. |
gaff | gaff check archivo.c | Reglas 0x0103h, 0x0107h y 0x010Dh sobre constantes. |
grep | grep -nE 'const .*[a-z]' archivo.c | Posibles constantes mal nombradas. |
Checklist de autocontrol¶
¿Todo
constestá enMAYUSCULAS_SNAKE_CASE?¿Toda macro de valor está en mayúsculas?
¿Los nombres expresan el significado y no la letra?
¿Distinguí constantes de variables mutables?
Reglas relacionadas¶
0x0107h: Las macros #define deben nombrarse en MAYUSCULAS_SNAKE_CASE — nomenclatura de macros
#define.0x010Dh: Auditor de consistencia en nombres de constantes simbólicas — consistencia en nombres de constantes simbólicas.
0x0102h: Los argumentos de función y las variables locales deben usar snake_case en minúsculas — las variables locales, en cambio, van en minúsculas.
0x300Dh: Utilizá enum en lugar de ‘números mágicos’ para conjuntos de estados y valores constantes — usar
enumen lugar de números mágicos.0x2007h: Los valores de retorno numéricos deben definirse como constantes de preprocesador o enums — los valores de retorno numéricos se nombran con constantes.