Regla 0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos
Sintaxis y formato visual (0x00XX)
0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos¶
Enunciado normativo¶
DEBE dejarse exactamente un espacio en blanco después de toda coma que separe argumentos, parámetros, declaradores o elementos de una lista. NO DEBE pegarse el elemento siguiente a la coma.
La coma en sí no lleva espacio anterior (0x000Ah: Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,)).
¿Por qué existe esta regla?¶
El problema¶
La coma es el separador más frecuente del código. Sin espacio posterior,
foo(x,y,z) forma un bloque compacto donde los argumentos no se distinguen.
Con exactamente un espacio, los elementos se separan y el ojo enumera la
lista sin esfuerzo, como en el texto en prosa.
El espacio posterior es también una regla natural: en la escritura, la coma se escribe pegada a la palabra anterior y seguida de un espacio.
Consecuencias de violarla¶
| Tipo de consecuencia | Efecto concreto |
|---|---|
| Compilación | Ninguna: el espacio no cambia la lista. |
| Legibilidad | Los argumentos se confunden entre sí en listas largas. |
| Consistencia | Convive f(a, b) con g(x,y,z). |
| Depuración | Es más difícil ubicar visualmente un argumento puntual. |
| Revisión | El espaciado irregular distrae de la lógica de la llamada. |
Fundamento en el estándar y en la cátedra¶
El estándar trata la coma como separador de listas (§6.7.6, §6.5.2) y permite cualquier espaciado (§6.4). La cátedra exige un espacio posterior para que las listas se lean como enumeraciones, complementando 0x000Ah: Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,) y 0x0015h: Validador de espaciado en listas de argumentos y llamadas a funciones.
Alcance y excepciones¶
Aplica a listas de argumentos, parámetros, declaradores, inicializadores y
elementos de enum. Dentro de una cadena literal la coma es texto y no se
altera. La coma del operador ((a, b)) sigue el mismo criterio de lista.
Ejemplos exhaustivos¶
❌ Contraejemplo 1 — Lista sin espacios¶
int a,b = 0;
foo(x,y,z);Por qué falla: los elementos quedan pegados; en la declaración, además,
a,b parece una sola construcción.
❌ Contraejemplo 2 — Espaciado irregular¶
calcular( base,tasa , plazo );Por qué falla: la primera coma no tiene espacio posterior, la segunda tiene uno anterior (que viola 0x000Ah: Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,)) y el paréntesis tiene espacios internos (0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras ‘(’ o antes de ‘)’); todo el espaciado es inconsistente.
✅ Ejemplo conforme 1 — Lista separada¶
int a, b = 0;
foo(x, y, z);Justificación: cada coma queda adherida al elemento anterior y seguida de un único espacio, de modo que los elementos se enumeran de un vistazo.
✅ Ejemplo conforme 2 — Firma y llamada coherentes¶
static int calcular_interes(int capital, double tasa, int plazo_meses)
{
return capital;
}
int resultado = calcular_interes(monto, 0.05, 12);Justificación: la firma y la llamada usan el mismo espaciado, lo que refuerza la correspondencia posicional entre parámetros y argumentos.
⚠️ Casos límite¶
Comas en cadenas:
printf("a,b")conserva la coma sin espacio porque es contenido, no separador.Declaradores múltiples: la regla no autoriza
int a, b;si se sigue 0x0002h: Una declaración de variable por línea, aunque el espaciado sea correcto.Macros con comas: los argumentos de una macro funcional siguen la misma convención.
Cómo detectarla¶
| Herramienta | Comando | Señal |
|---|---|---|
gaff | gaff check archivo.c / gaff fix archivo.c | Coma sin espacio posterior. |
grep | grep -nE ',[^[:space:]\n]' archivo.c | Posibles comas pegadas. |
clang-format | clang-format --dry-run archivo.c | Reespaciado de listas. |
Checklist de autocontrol¶
¿Toda coma lleva exactamente un espacio después?
¿Ninguna coma lleva espacio antes?
¿Revisé tanto declaraciones como llamadas?
¿Evité pegar argumentos en listas largas?
Reglas relacionadas¶
0x000Ah: Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,) — sin espacio antes de
;ni de,.0x0015h: Validador de espaciado en listas de argumentos y llamadas a funciones — espaciado en listas de argumentos y llamadas.
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.
0x000Fh: Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código — prohibición de espacios múltiples.