Regla 0x000Fh: Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código
Sintaxis y formato visual (0x00XX)
0x000Fh: Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código¶
Enunciado normativo¶
NO DEBE haber dos o más espacios consecutivos dentro de una línea de código. Solo se exceptúa la sangría inicial que delimita los bloques.
Los elementos de una línea se separan con exactamente un espacio.
¿Por qué existe esta regla?¶
El problema¶
Los espacios múltiples son invisibles en un vistazo y por eso suelen quedar
como residuo de alineaciones manuales o de ediciones descuidadas. Además de
ensuciar los diff, compiten con una práctica extendida que consiste en
alinear los signos = con espacios: la cátedra la rechaza porque el ancho de
las columnas depende del nombre más largo y cualquier cambio desalinea todo
el bloque.
Un solo espacio como separador único hace que el espaciado sea predecible y automáticamente normalizable.
Consecuencias de violarla¶
| Tipo de consecuencia | Efecto concreto |
|---|---|
| Compilación | Ninguna: los espacios son irrelevantes (§6.4). |
| Legibilidad | Líneas aparentemente iguales difieren en columnas invisibles. |
| Consistencia | El archivo mezcla zonas alineadas a mano y zonas normales. |
| Mantenibilidad | Cambiar un nombre obliga a reajustar toda la alineación. |
| Control de versiones | El diff reporta cambios por un espacio de más. |
Fundamento en el estándar y en la cátedra¶
El estándar da a los espacios blancos el mismo valor separador (§6.4); no hay razón técnica para duplicarlos. La cátedra fija un único espacio interior para que el formato sea uniforme y para que 0x0008h: Alineación vertical consistente en asignaciones y declaraciones consecutivas regule solo la sangría y no la alineación de columnas.
Alcance y excepciones¶
Aplica dentro de la línea de código. La sangría al inicio del bloque queda exceptuada de la prohibición pero debe seguir 0x0004h: Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves (cuatro espacios por nivel). El contenido de las cadenas literales y los comentarios pueden tener varios espacios si son texto.
Ejemplos exhaustivos¶
❌ Contraejemplo 1 — Espacios repartidos en toda la expresión¶
int total = cantidad * precio;Por qué falla: cada operador y operando queda rodeado de espacios extra; la línea tiene el mismo significado que la versión con un solo espacio, pero se ve desprolija y no aporta información.
❌ Contraejemplo 2 — Alineación manual del =¶
int a = 1;
int bb = 2;
int ccc = 3;Por qué falla: los espacios múltiples alinean los signos =, pero cualquier
cambio de nombre desbarata las columnas; además contradice
0x0008h: Alineación vertical consistente en asignaciones y declaraciones consecutivas, que alinea la sangría, no el operador.
✅ Ejemplo conforme 1 — Un espacio interior¶
int total = cantidad * precio;Justificación: cada separador interior es un único espacio; la expresión se lee sin ruido y es estable ante refactorizaciones.
✅ Ejemplo conforme 2 — Sangría correcta y separadores simples¶
for (size_t i = 0; i < cantidad; i++)
{
if (valores[i] > mayor)
{
mayor = valores[i];
}
}Justificación: la sangría inicial usa múltiplos de cuatro y los espacios interiores son siempre uno, de modo que la alineación vertical surge de la indentación y no de espacios manuales.
⚠️ Casos límite¶
Comentarios: se permite espaciar para alinear bloques de comentarios si mejora la lectura, pero no es obligatorio.
Cadenas con formato:
printf("%5d", x)usa el ancho del campo, no espacios consecutivos en el fuente.Continuaciones: las líneas partidas se alinean con la sangría de 0x0004h: Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves, no con espacios sueltos.
Cómo detectarla¶
| Herramienta | Comando | Señal |
|---|---|---|
gaff | gaff check archivo.c / gaff fix archivo.c | Dos o más espacios consecutivos. |
grep | grep -nE ' +' archivo.c | Líneas con espacios múltiples. |
clang-format | clang-format --dry-run archivo.c | Normalización del espaciado. |
Checklist de autocontrol¶
¿Hay dos o más espacios seguidos fuera de la sangría?
¿Dejé de alinear
=con espacios manuales?¿Los separadores interiores son siempre uno?
¿La sangría respeta los múltiplos de cuatro?
Reglas relacionadas¶
0x0008h: Alineación vertical consistente en asignaciones y declaraciones consecutivas — alineación vertical basada en la sangría, no en columnas.
0x0004h: Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves — cuatro espacios por nivel de anidación.
0x0003h: Un espacio antes y después de cada operador binario — un espacio alrededor de operadores binarios.
0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras ‘(’ o antes de ‘)’ — sin espacios internos en paréntesis.
0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos — un espacio después de la coma.