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 0x000Ch: Prohibición de espacios en blanco entre operadores unarios (++, --, !) y su operando

Sintaxis y formato visual (0x00XX)

Universidad Nacional de Río Negro

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 consecuenciaEfecto concreto
CompilaciónNinguna: i ++ y i++ son idénticos (§6.4).
LegibilidadEl operador parece binario y se espera otro operando.
ConsistenciaConviven i++, i ++, ++ j y ! x.
Confusióni ++ se puede confundir con una suma mal escrita.
MantenibilidadEl 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

Cómo detectarla

HerramientaComandoSeñal
gaffgaff check archivo.c / gaff fix archivo.cEspacio entre unario y operando.
grep`grep -nE '(++--
clang-formatclang-format --dry-run archivo.cCorrección del espaciado unario.

Checklist de autocontrol

Reglas relacionadas