Regla 0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras '(' o antes de ')'
Sintaxis y formato visual (0x00XX)
0x000Eh: Prohibición de espacios en blanco internos inmediatamente tras ‘(’ o antes de ‘)’¶
Enunciado normativo¶
NO DEBE dejarse espacio en blanco inmediatamente después de
(ni inmediatamente antes de), ni en expresiones, ni en condiciones, ni en invocaciones de función.
Los paréntesis abrazan su contenido sin aire interior.
¿Por qué existe esta regla?¶
El problema¶
Los paréntesis delimitan una subexpresión. Un espacio interior (if ( x > 0 )) aleja visualmente el contenido del delimitador y hace que el paréntesis
parezca flotar. En llamadas de función separa el nombre del primer argumento
y el último del cierre, rompiendo la lectura de la lista.
La forma (x) mantiene el contenido pegado a los delimitadores y reserva el
espacio para el exterior, que es donde cumple una función (por ejemplo, entre
if y ().
Consecuencias de violarla¶
| Tipo de consecuencia | Efecto concreto |
|---|---|
| Compilación | Ninguna: el espacio interior es irrelevante (§6.4). |
| Legibilidad | El paréntesis parece desconectado de su contenido. |
| Consistencia | Convive (x) con ( x ) en el mismo archivo. |
| Ambigüedad | Un espacio antes de ) puede confundirse con un argumento faltante. |
| Mantenibilidad | El ruido de espaciado complica los diff. |
Fundamento en el estándar y en la cátedra¶
El estándar usa los paréntesis como tokens de agrupación y de llamada (§6.5.1, §6.5.2.2) y no impone espaciado. La cátedra prohíbe el espacio interior para que la agrupación se vea inmediata, en coherencia con 0x0003h: Un espacio antes y después de cada operador binario (que sí exige espacio fuera del paréntesis de control) y con 0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos.
Alcance y excepciones¶
Aplica a condiciones, expresiones, llamadas, sizeof, conversiones y
paréntesis de control. El espacio entre una palabra clave y el paréntesis de
apertura sí es obligatorio (0x0011h: Validador de espaciado estricto en sentencias de control). En un cast, (int) x lleva el
espacio después del cierre, nunca dentro.
Ejemplos exhaustivos¶
❌ Contraejemplo 1 — Condición con aire interior¶
if ( x > 0 ) {
foo( a, b );
}Por qué falla: el espacio interior aleja el contenido de los paréntesis y se suma al estilo K&R de la llave (0x0007h: Las llaves deben ubicarse en líneas independientes según el estilo Allman), volviendo la línea ilegible.
❌ Contraejemplo 2 — Llamada con argumentos separados del delimitador¶
resultado = sumar( monto , tasa );Por qué falla: espacios internos en ambos extremos, además de un espacio antes de la coma (0x000Ah: Prohibición de espacios en blanco antes de separadores de sintaxis (; y ,)); la lista de argumentos se ve desarmada.
✅ Ejemplo conforme 1 — Paréntesis ajustados¶
if (x > 0)
{
foo(a, b);
}Justificación: el espacio existe entre if y (, pero no dentro del
paréntesis; el contenido queda abrazado por los delimitadores.
✅ Ejemplo conforme 2 — Cast y sizeof¶
double promedio = (double)suma / (double)cantidad;
size_t bytes = sizeof(int) * cantidad;Justificación: el cast y sizeof escriben sus paréntesis ajustados, sin un
espacio interior que sugiera otro contenido.
⚠️ Casos límite¶
Paréntesis vacíos:
funcion()no lleva espacio interno; la ausencia de argumentos se ve como un bloque compacto.Paréntesis de control: el espacio va antes del
((0x0011h: Validador de espaciado estricto en sentencias de control), nunca dentro.Anidación:
((a + b) * c)no lleva espacios internos en ningún nivel.
Cómo detectarla¶
| Herramienta | Comando | Señal |
|---|---|---|
gaff | gaff check archivo.c / gaff fix archivo.c | Espacio tras ( o antes de ). |
grep | grep -nE '\(\s+|\s+\)' archivo.c | Paréntesis con aire interior. |
clang-format | clang-format --dry-run archivo.c | Ajuste del espaciado interno. |
Checklist de autocontrol¶
¿Ningún
(tiene espacio inmediatamente después?¿Ningún
)tiene espacio inmediatamente antes?¿Mantuve el espacio entre
if/for/whiley el(?¿Revisé casts,
sizeofy paréntesis anidados?
Reglas relacionadas¶
0x0011h: Validador de espaciado estricto en sentencias de control — un espacio entre palabra clave de control y
(.0x0003h: Un espacio antes y después de cada operador binario — espaciado exterior alrededor de operadores y control.
0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos — espacio obligatorio después de la coma.
0x0015h: Validador de espaciado en listas de argumentos y llamadas a funciones — espaciado en listas de argumentos.
0x000Fh: Prohibición de múltiples espacios en blanco consecutivos dentro de una línea de código — prohibición de espacios múltiples.