Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Regla 0x0015h: Validador de espaciado en listas de argumentos y llamadas a funciones

Sintaxis y formato visual (0x00XX)

Universidad Nacional de Río Negro

0x0015h: Validador de espaciado en listas de argumentos y llamadas a funciones

Enunciado normativo

En listas de parámetros y de argumentos, toda coma DEBE ir adherida al elemento anterior y seguida por exactamente un espacio: f(a, b, c).

¿Por qué existe esta regla?

El problema

La coma es un separador de baja jerarquía visual: si no lleva espacio detrás, el lector agrupa mal los elementos de la lista; si lleva espacio delante, la coma parece pertenecer al elemento siguiente y se corta la asociación con el anterior. El espacio uniforme después de la coma convierte a la lista en una secuencia regular de bloques y permite contar argumentos de un vistazo, algo crítico cuando se llama a printf con un formato y varios valores. La regla concreta la convención general de comas de 0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos al caso específico de firmas y llamadas.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
LegibilidadListas apretadas (f(a,b,c)) o con espacio previo (f(a , b)) se leen como bloques irregulares.
Bug silenciosoAl contar argumentos de printf es fácil equivocarse y pasar un tipo incorrecto.
ConsistenciaFirmas y llamadas del mismo archivo usan criterios distintos.
Revisióngaff la corrige automáticamente; dejarla es desprolijidad.

Fundamento en el estándar y en la cátedra

ISO/IEC 9899:2011 §6.9.1 (Function definitions) y §6.5.2.2 (Function calls) definen la gramática de las listas; el espacio no es significativo más que para separar tokens. Por eso la norma es convencional. La cátedra la adopta para uniformar firmas, prototipos y llamadas, y la articula con 0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos (coma seguida de un espacio), 0x000Ah: Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,) (nada de espacio antes de la coma) y 0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras ‘(’ o antes de ‘)’ (nada de espacio interno en los paréntesis).

Alcance y excepciones

Aplica a listas de parámetros de definiciones y prototipos, a listas de argumentos en llamadas, y a listas de inicialización de agregados. No aplica a las comas dentro de literales de cadena ("a, b"), que no son separadores, ni a las comas del operador de coma en una expresión, que conviene evitar salvo en la cabecera de un for. Las comas de múltiples declaraciones también se rigen por esta norma, aunque 0x0002h: Una declaración de variable por línea prohíbe declarar varias variables por línea.

Ejemplos exhaustivos

❌ Contraejemplo 1 — Sin espacio después de la coma

calcular(x,y,z);
imprimir("total",valor,unidades);

Por qué falla: la ausencia de espacio comprime la lista y dificulta distinguir cuántos argumentos recibe la función; también viola 0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos.

❌ Contraejemplo 2 — Espacio antes de la coma

calcular(x , y);
static int maximo(int a ,int b);

Por qué falla: el espacio delante de la coma despega al separador del elemento que cierra, y viola 0x000Ah: Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,). La segunda línea además mezcla el criterio correcto e incorrecto en una misma firma.

✅ Ejemplo conforme 1 — Llamada canónica

calcular(x, y, z);

Por qué cumple: cada coma está pegada al argumento previo y seguida de un solo espacio, en línea con 0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos.

✅ Ejemplo conforme 2 — Interacción con firmas y printf

static int maximo(int a, int b, int c)
{
    int mayor = a;
    if (b > mayor) {
        mayor = b;
    }
    if (c > mayor) {
        mayor = c;
    }
    return mayor;
}

int main(void)
{
    printf("%d %d %d\n", a, b, maximo(a, b, c));
    return 0;
}

Por qué cumple: la firma y las llamadas comparten el mismo espaciado, no hay blancos internos junto a los paréntesis (0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras ‘(’ o antes de ‘)’) y el formato de printf queda legible, lo que ayuda a contar argumentos.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
gaffgaff check archivo.cReporta coma sin espacio posterior o con espacio anterior.
gaffgaff fix archivo.cNormaliza el espaciado de todas las listas.
gcc / clanggcc -Wall -Wextra -std=c11 -c archivo.cNo reporta: es una regla de estilo.

Checklist de autocontrol

Reglas relacionadas