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 0x0011h: Validador de espaciado estricto en sentencias de control

Sintaxis y formato visual (0x00XX)

Universidad Nacional de Río Negro

0x0011h: Validador de espaciado estricto en sentencias de control

Enunciado normativo

DEBE existir exactamente un espacio en blanco entre las palabras clave if, for, while y switch y el paréntesis de apertura de su condición: if (x), for (...), while (...), switch (op). NO DEBE escribirse if(...) ni while (...).

¿Por qué existe esta regla?

El problema

if, while, for y switch son palabras clave: el compilador las reconoce por el lexema, no por el paréntesis, de modo que if(x) y if (x) generan el mismo código objeto. La regla no previene un error de traducción, sino una ambigüedad visual: al pegar la palabra clave al paréntesis, la sentencia se parece a una llamada a función y refuerza la idea errónea de que if “es una función”. Separar con un espacio mantiene visible la frontera.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
Legibilidadif(x) se confunde con una llamada; el lector pierde el tiempo clasificando el token.
ConsistenciaConviven if ( y if( en el mismo archivo, lo que rompe el estilo uniforme.
SemánticaNinguna: el código compila y ejecuta igual.
Revisióngaff lo detecta y lo corrige automáticamente; no hay excusa para dejarlo.

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

ISO/IEC 9899:2011 §6.8.4 y §6.8.5 definen la gramática; el espacio sólo separa tokens y no cambia el significado. Por eso la norma es convencional, y la cátedra la adopta porque gaff la aplica de forma uniforme y porque distinguir palabra clave de llamada es parte de la alfabetización en C. Se articula con 0x0003h: Un espacio antes y después de cada operador binario y con 0x000Fh: Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código.

Alcance y excepciones

Aplica a if, else if, for, while y switch. No aplica a sizeof, que es un operador y se escribe sizeof(x) sin espacio, ni a return, cuya forma está cubierta por 0x200Fh: Prohibición de paréntesis superfluos en sentencia return. do no lleva paréntesis. El código generado automáticamente y no editado a mano queda exceptuado, pero debe regenerarse con el formato correcto si se versiona.

Ejemplos exhaustivos

❌ Contraejemplo 1 — Palabra clave pegada al paréntesis

if(x > 0) {
    return 1;
}

Por qué falla: if( imita la sintaxis de una llamada y es exactamente lo que la regla prohíbe; gaff fix insertaría el espacio faltante.

❌ Contraejemplo 2 — Espacios múltiples y omisión mezclados

while  (i < n) {
    i++;
}
switch(opcion) {
    default:
        break;
}

Por qué falla: while ( lleva dos espacios —también viola 0x000Fh: Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código— y switch( no lleva ninguno. La inconsistencia dentro del mismo bloque es la señal de que nadie pasó el formateador.

✅ Ejemplo conforme 1 — Sentencia simple

if (x > 0) {
    return 1;
}

Por qué cumple: hay un único espacio entre if y (, el operador binario lleva sus espacios (0x0003h: Un espacio antes y después de cada operador binario) y no hay blancos internos junto a los paréntesis (0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras ‘(’ o antes de ‘)’).

✅ Ejemplo conforme 2 — Interacción entre estructuras de control

for (size_t i = 0; i < n; i++) {
    if (valores[i] > maximo) {
        maximo = valores[i];
    }
}

while (j > 0 && resto == 0) {
    j /= 2;
}

switch (modo) {
    case MODO_RAPIDO:
        avanzar();
        break;
    default:
        break;
}

Por qué cumple: cada palabra clave está separada por exactamente un espacio, no se pegan llamadas al operador y las comas siguen 0x0015h: Validador de espaciado en listas de argumentos y llamadas a funciones.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
gaffgaff check archivo.cMarca la falta de espacio o el exceso entre palabra clave y (.
gaffgaff fix archivo.cInserta el único espacio canónico.
gcc / clanggcc -Wall -Wextra -std=c11 -c archivo.cNo reporta nada: es una regla de estilo, no semántica.

Checklist de autocontrol

Reglas relacionadas