Regla 0x000Ch: Prohibición de espacios en blanco entre operadores unarios (++, --, !) y su operando
Sintaxis y formato visual (0x00XX)
0x000Ch: Prohibición de espacios en blanco entre operadores unarios (++, --, !) y su operando¶
Enunciado normativo¶
NO DEBE dejarse espacio entre los operadores unarios
++,--y!y su operando. DEBEN escribirse adheridos:i++,++j,!activo.
Los demás unarios (*, &, ~) siguen la regla 0x0016h: Validador de espaciado en operadores unarios.
¿Por qué existe esta regla?¶
El problema¶
Un operador unario modifica un único operando y no admite un segundo
término. Si se escribe i ++, el espacio parece indicar que ++ podría ser
binario y esperar algo más, sobre todo porque + sí es un operador binario.
Separarlos introduce una ambigüedad visual que no existe en la gramática.
En ! activo ocurre algo parecido: la negación lógica debe leerse como un
predicado unido a su variable (!activo), no como un signo suelto.
Consecuencias de violarla¶
| Tipo de consecuencia | Efecto concreto |
|---|---|
| Compilación | Ninguna: i ++ y i++ son idénticos (§6.4). |
| Legibilidad | El operador parece binario y se espera otro operando. |
| Consistencia | Conviven i++, i ++, ++ j y ! x. |
| Confusión | i ++ se puede confundir con una suma mal escrita. |
| Mantenibilidad | El ruido de espaciado dificulta comparar expresiones. |
Fundamento en el estándar y en la cátedra¶
El estándar clasifica ++, -- y ! como operadores unarios de prefijo o
sufijo (§6.5.2.4, §6.5.3) y no impone su separación. La cátedra los escribe
adheridos para distinguirlos de los operadores binarios y unificar el estilo
con 0x0016h: Validador de espaciado en operadores unarios.
Alcance y excepciones¶
Aplica a las formas prefijas y posfijas de ++ y --, y a la negación
lógica !. No rige a los operadores binarios +, -, &&, ni al !=, que
sí llevan espacios por 0x0003h: Un espacio antes y después de cada operador binario. Tampoco a la desreferenciación, cubierta
por 0x0016h: Validador de espaciado en operadores unarios.
Ejemplos exhaustivos¶
❌ Contraejemplo 1 — Incrementos con espacio¶
i ++;
++ j;Por qué falla: i ++ parece una suma incompleta y ++ j separa el prefijo
de la variable que modifica; ambos pierden la forma compacta del operador
unario.
❌ Contraejemplo 2 — Negación separada¶
if (! activo)
{
registrar_inactividad();
}Por qué falla: ! activo separa la negación de su predicado; el lector
espera un operando entre ! y activo en lugar de interpretarlos como una
unidad.
✅ Ejemplo conforme 1 — Operadores adheridos¶
i++;
++j;Justificación: la forma posfija y la prefija quedan pegadas a su única variable, sin sugerir un segundo operando.
✅ Ejemplo conforme 2 — Negación como predicado¶
if (!activo)
{
registrar_inactividad();
}
while (!lista_vacia(pila))
{
desapilar(pila);
}Justificación: !activo y !lista_vacia(pila) se leen como predicados
booleanos completos, en línea con 0x1005h: Reemplazá las condiciones ambiguas basadas en la ‘veracidad’ (truthiness) del tipo de dato.
⚠️ Casos límite¶
!=no es!:a != blleva espacios porque es un operador binario de comparación; no confundir con!a.Doble negación:
!!activono lleva espacios entre ninguno de los signos.a++ + b: el espacio va alrededor del+binario, no entreay++.
Cómo detectarla¶
| Herramienta | Comando | Señal |
|---|---|---|
gaff | gaff check archivo.c / gaff fix archivo.c | Espacio entre unario y operando. |
grep | `grep -nE '(++ | -- |
clang-format | clang-format --dry-run archivo.c | Corrección del espaciado unario. |
Checklist de autocontrol¶
¿Escribí
i++y++jsin espacios?¿Escribí
!activosin espacio?¿Dejé el espacio en los operadores binarios como
!=?¿Revisé también las dobles negaciones?
Reglas relacionadas¶
0x0016h: Validador de espaciado en operadores unarios — espaciado de
*,&,!,++y--.0x0003h: Un espacio antes y después de cada operador binario — espaciado de operadores binarios.
0x1005h: Reemplazá las condiciones ambiguas basadas en la ‘veracidad’ (truthiness) del tipo de dato — comparaciones explícitas y predicados legibles.
0x1014h: Detector de operadores de incremento o decremento múltiples en una misma expresión — evitar múltiples incrementos en una expresió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.