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 0x0003h: Un espacio antes y después de cada operador binario

Sintaxis y formato visual (0x00XX)

Universidad Nacional de Río Negro

0x0003h: Un espacio antes y después de cada operador binario

Enunciado normativo

DEBE dejarse exactamente un espacio en blanco antes y después de cada operador binario y entre una palabra clave de control y su paréntesis (if (, for (, while (, switch (). NO DEBE pegarse un operador binario a sus operandos.

La regla rige operadores aritméticos, relacionales, lógicos y de asignación.

¿Por qué existe esta regla?

El problema

El ojo no lee caracteres aislados: reconoce bloques. Un operador pegado a sus operandos (a+b*c) forma una mancha uniforme donde la precedencia (0x1013h: Detector de expresiones booleanas complejas sin paréntesis aclaratorios) se vuelve difícil de verificar. El espacio separa visualmente los términos de la operación y deja que la estructura de la expresión emerja sin esfuerzo.

En las palabras clave de control el espacio cumple otra función: distingue la palabra clave de una supuesta llamada a función. if(x) se lee como si if fuera una función; if (x) lo identifica como estructura de control.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
CompilaciónNinguna: la semántica no cambia.
LegibilidadLas expresiones largas se vuelven ilegibles y esconden la precedencia.
Bug silenciosoUn error de precedencia (a+b*c) pasa desapercibido en la revisión.
ConsistenciaEl archivo mezcla zonas espaciadas y zonas comprimidas.
Revisión docenteLa corrección visual y la comparación con la norma se dificultan.

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

El estándar trata los espacios como separadores sin valor semántico (§6.4, tokens). La cátedra adopta el espaciado uniforme porque prepara al estudiante para reconocer las unidades léxicas de C y porque es requisito de otras reglas de espaciado del catálogo.

Alcance y excepciones

Cubre operadores binarios (+, -, *, /, %, =, ==, <, &&, ||, |, &, entre otros). No rige a los operadores unarios, regulados por 0x000Ch: Prohibición de espacios en blanco entre operadores unarios (++, --, !) y su operando y 0x0016h: Validador de espaciado en operadores unarios, ni a ->, . (0x000Bh: Prohibición de espacios en blanco alrededor de operadores de acceso a miembros (-> y .)) ni a la coma (0x000Dh: Espacio en blanco obligatorio tras la coma separadora en listas y argumentos).

Ejemplos exhaustivos

❌ Contraejemplo 1 — Toda la expresión comprimida

uno=dos+tres;

Por qué falla: no se distingue la asignación de la suma y el lector debe aplicar la precedencia mentalmente para saber qué se asigna.

❌ Contraejemplo 2 — Condición sin espacios y palabra clave pegada

if(activo&&saldo>=limite){

Por qué falla: if( se confunde con una función, y activo&&saldo>=limite oculta que hay dos operadores lógicos y uno relacional en juego.

✅ Ejemplo conforme 1 — Operadores separados

uno = dos + tres;
total = base * (1 + IVA);

Justificación: cada operador binario tiene un espacio a cada lado; los paréntesis explicitan la agrupación de la suma.

✅ Ejemplo conforme 2 — Control con espacio y condición clara

if (activo && saldo >= limite)
{
    autorizar();
}

Justificación: el espacio tras if identifica la estructura y los operadores relacional y lógico quedan visualmente separados.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
gaffgaff check archivo.c / gaff fix archivo.cRegla 0x0003h: operador binario sin espacio.
clang-formatclang-format --dry-run archivo.cDiferencias de espaciado respecto de la configuración.
gcc / clanggcc -Wall -Wextra -std=c11No detecta espaciado; sí advierte -Wparentheses por precedencia.

Checklist de autocontrol

Reglas relacionadas