Regla 0x0008h: Alineación vertical consistente en asignaciones y declaraciones consecutivas
Sintaxis y formato visual (0x00XX)
0x0008h: Alineación vertical consistente en asignaciones y declaraciones consecutivas¶
Enunciado normativo¶
DEBE mantenerse una alineación uniforme en bloques de tres o más declaraciones o asignaciones consecutivas, todas al mismo nivel de sangría. NO DEBE introducirse indentaciones dispares dentro del mismo bloque.
La corrección automática normaliza la sangría de estos bloques.
¿Por qué existe esta regla?¶
El problema¶
Una declaración con un espacio de más o de menos rompe la columna por la que el ojo recorre el bloque. El lector interpreta la línea desalineada como perteneciente a un nivel de anidación distinto y se equivoca al leer el alcance. Un bloque de asignaciones consecutivas debe verse como una rejilla: todas las líneas comparten la misma columna inicial.
Esta regla es la versión vertical de 0x0004h: Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves: aquella fija el ancho de un nivel; esta verifica que líneas hermanas no queden a distinta altura.
Consecuencias de violarla¶
| Tipo de consecuencia | Efecto concreto |
|---|---|
| Compilación | Ninguna: la sangría es irrelevante para el compilador. |
| Legibilidad | Las líneas desalineadas simulan una jerarquía que no existe. |
| Mantenibilidad | Agregar o quitar una línea obliga a realinear manualmente. |
| Revisión | Parece código movido cuando no hubo cambio lógico. |
| Consistencia | El bloque pierde la estructura de rejilla. |
Fundamento en el estándar y en la cátedra¶
El estándar ignora el espaciado (§6.4). La cátedra exige bloques de declaraciones y asignaciones alineados para que la estructura sea predictable y para que la corrección automática pueda normalizarlos sin ambigüedad.
Alcance y excepciones¶
Aplica a tres o más declaraciones o asignaciones consecutivas. Una línea de
continuación de una expresión larga se alinea según 0x0004h: Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves y
0x0006h: Las líneas de código no deben exceder los 79 caracteres, no según esta regla. La alineación de los signos = con
espacios extra está prohibida por 0x000Fh: Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código: lo que se alinea es la
indentación, no las columnas del operador.
Ejemplos exhaustivos¶
❌ Contraejemplo 1 — Escalera de indentaciones¶
int a = 1;
int b = 2;
int c = 3;Por qué falla: cada línea parece anidar dentro de la anterior, pero las tres son hermanas; la falsa jerarquía induce a error al leer el alcance.
❌ Contraejemplo 2 — Bloque roto por un espacio¶
int filas = 3;
int columnas = 4;
int total = filas * columnas;Por qué falla: la tercera línea pierde la columna de las anteriores y el bloque deja de verse como una unidad.
✅ Ejemplo conforme 1 — Rejilla uniforme¶
int a = 1;
int b = 2;
int c = 3;Justificación: todas las líneas arrancan en la misma columna y el bloque se lee como una lista.
✅ Ejemplo conforme 2 — Asignaciones consecutivas¶
filas = obtener_filas();
columnas = obtener_columnas();
total = filas * columnas;Justificación: la sangría es idéntica y el único espaciado variable está alrededor de los operadores, regulado por 0x0003h: Un espacio antes y después de cada operador binario.
⚠️ Casos límite¶
Alineación del
=: escribirint a = 1;viola 0x000Fh: Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código; esta regla no autoriza espacios múltiples.Comentarios intercalados: un comentario entre dos declaraciones no rompe el bloque si comparte la columna.
Líneas en blanco: separan subgrupos y reinician la noción de bloque.
Cómo detectarla¶
| Herramienta | Comando | Señal |
|---|---|---|
gaff | gaff check archivo.c / gaff fix archivo.c | Sangría dispar en declaraciones consecutivas. |
| Editor | Guías de indentación | Líneas fuera de la columna del bloque. |
grep | grep -nE '^ +' archivo.c | Indentaciones inusuales. |
Checklist de autocontrol¶
¿Las declaraciones consecutivas comparten columna?
¿Las asignaciones consecutivas comparten columna?
¿Evité alinear
=con espacios extra?¿Separé los subgrupos con líneas en blanco?
Reglas relacionadas¶
0x0004h: Cada bloque debe tener una indentación de cuatro espacios respecto a su contenedor y llaves — cuatro espacios por nivel de anidación.
0x000Fh: Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código — prohibición de espacios múltiples dentro de la línea.
0x0003h: Un espacio antes y después de cada operador binario — espaciado uniforme alrededor de operadores.
0x0002h: Una declaración de variable por línea — una variable por línea hace visible la rejilla.
0x0007h: Las llaves deben ubicarse en líneas independientes según el estilo Allman — llaves alineadas como referencia vertical.