Regla 0x000Ah: Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,)
Sintaxis y formato visual (0x00XX)
0x000Ah: Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,)¶
Enunciado normativo¶
NO DEBE dejarse espacio en blanco antes de
;ni antes de,. Ambos separadores DEBEN quedar inmediatamente adheridos al token anterior.
El espacio posterior a la coma se rige por 0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos.
¿Por qué existe esta regla?¶
El problema¶
En español se escribe espacio antes de dos puntos y a veces antes de otros
signos, y ese reflejo se traslada al código. En C, int a , b ; deja los
separadores flotando y rompe la asociación visual entre el separador y el
elemento al que pertenece. El punto y coma cierra la sentencia; debe verse
pegado a ella.
La convención es una de las más fáciles de automatizar, por eso admite corrección automática: no hay ambigüedad posible sobre la forma correcta.
Consecuencias de violarla¶
| Tipo de consecuencia | Efecto concreto |
|---|---|
| Compilación | Ninguna: el espacio es irrelevante para el parser. |
| Legibilidad | Los separadores parecen pertenecer al token siguiente. |
| Consistencia | El archivo mezcla a , b con a, b. |
| Mantenibilidad | El espaciado irregular introduce ruido en los diff. |
| Revisión | Se detecta a simple vista y distrae de la lógica. |
Fundamento en el estándar y en la cátedra¶
El estándar clasifica los espacios como separadores sin significado (§6.4).
La cátedra fija la regla para que ; y , actúen como signos de cierre y no
como prefijos del token siguiente, en coherencia con 0x0003h: Un espacio antes y después de cada operador binario y
0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos.
Alcance y excepciones¶
Aplica dentro de código: sentencias, cabeceras de for, listas de
declaradores y argumentos. No alcanza el contenido de las cadenas literales
(printf("a , b")), donde el espacio es texto. La coma del operador
(a, b) sigue la misma regla.
Ejemplos exhaustivos¶
❌ Contraejemplo 1 — Espacio antes de ; y ,¶
int a , b = 10 ;Por qué falla: ambos separadores quedan despegados del token anterior y la declaración parece compuesta de fragmentos sueltos.
❌ Contraejemplo 2 — Llamada con separadores flotantes¶
resultado = sumar( x , y ) ;Por qué falla: además de los espacios antes de , y ;, hay espacios
internos de paréntesis que violan 0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras ‘(’ o antes de ‘)’; la combinación vuelve la
línea ilegible.
✅ Ejemplo conforme 1 — Declaración limpia¶
int a, b = 10;Justificación: la coma queda pegada a a y el punto y coma a 10; el
espacio posterior a la coma lo aporta 0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos.
✅ Ejemplo conforme 2 — Cabecera de for¶
for (size_t i = 0; i < cantidad; i++)
{
procesar(valores[i]);
}Justificación: cada ; cierra su cláusula sin espacio previo y las comas de
parámetros quedan adheridas al elemento anterior.
⚠️ Casos límite¶
Coma del operador:
a = (b, c);no lleva espacio antes de la coma y sí después, igual que en una lista.Punto y coma vacío:
for (;;)es válido y no admite espacios internos por 0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras ‘(’ o antes de ‘)’.Cadenas:
"a , b"conserva los espacios porque son datos, no separadores.
Cómo detectarla¶
| Herramienta | Comando | Señal |
|---|---|---|
gaff | gaff check archivo.c / gaff fix archivo.c | Espacio antes de ; o ,. |
grep | grep -nE ' +[;,]' archivo.c | Candidatos a separador precedido por espacio. |
clang-format | clang-format --dry-run archivo.c | Reubicación de los separadores. |
Checklist de autocontrol¶
¿Ningún
;tiene un espacio inmediatamente anterior?¿Ninguna
,tiene un espacio inmediatamente anterior?¿Puse exactamente un espacio después de cada coma?
¿Revisé también las cabeceras de
for?
Reglas relacionadas¶
0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos — espacio obligatorio después de la coma.
0x0015h: Validador de espaciado en listas de argumentos y llamadas a funciones — espaciado en listas de argumentos.
0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras ‘(’ o antes de ‘)’ — sin espacios internos en paréntesis.
0x0003h: Un espacio antes y después de cada operador binario — espaciado alrededor de operadores binarios.
0x0002h: Una declaración de variable por línea — una sentencia por línea.