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 0x100Ch: Espaciado obligatorio alrededor de operadores ternarios ('? :')

Estructuras de control y flujo (0x10XX)

Universidad Nacional de Río Negro

0x100Ch: Espaciado obligatorio alrededor de operadores ternarios (‘? :’)

Enunciado normativo

Cuando se use el operador condicional ?: —lo que la cátedra desaconseja por 0x1007h: No utilizar el operador condicional (ternario) ?:—, DEBE colocarse exactamente un espacio en blanco antes y después de ? y de :. NO DEBE aparecer el operador pegado a sus operandos ((a < b)?a:b).

¿Por qué existe esta regla?

El problema

Los tres tokens ?, : y ) compiten por la atención cuando están pegados. Sin espacios, (a < b)?a:b se lee como una masa de signos donde cuesta separar la condición de las dos ramas. El espaciado es la única señal visual que agrupa cada parte.

Aun así, el espaciado no resuelve el problema de fondo del ternario: su condición y sus ramas siguen embutidas en una expresión. Por eso la cátedra lo desaconseja en 0x1007h: No utilizar el operador condicional (ternario) ?:; esta regla solo normaliza el código legado o excepcional mientras se elimina.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
LegibilidadLos operandos y los operadores se confunden visualmente.
EstiloRompe la convención general de espaciado de operadores.
RevisiónEl corrector gasta atención en descifrar en lugar de evaluar la lógica.
Riesgo de bugUn ? pegado puede confundirse con parte de un identificador.

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

ISO/IEC 9899:2011 §6.5.15 define ? :; el espaciado es cuestión de estilo. La cátedra adopta la misma convención que para los operadores binarios en 0x0003h: Un espacio antes y después de cada operador binario: un espacio a cada lado. gaff lo aplica automáticamente, pero el objetivo es que el autor lo escriba bien desde el inicio.

Alcance y excepciones

Ejemplos exhaustivos

❌ Contraejemplo 1 — ternario sin espacios

int min = (a < b)?a:b;

Por qué falla: los dos puntos quedan pegados a ambas ramas y el ojo lee b:a como una unidad. La condición también se confunde con su paréntesis.

❌ Contraejemplo 2 — espaciado inconsistente

int max = (a > b) ?a : b;

Por qué falla: hay espacio antes de ? pero no después, y no hay espacio antes de :. La asimetría sugiere una estructura que no existe y distrae.

✅ Ejemplo conforme 1 — espaciado simétrico

int min = (a < b) ? a : b;

Un espacio a cada lado de ? y :; cada token se separa y la expresión se lee por partes.

✅ Ejemplo conforme 2 — reemplazo por if / else

int min;
if (a < b)
{
    min = a;
}
else
{
    min = b;
}

La forma conforme por excelencia: se elimina el ternario, con lo cual el espaciado deja de ser un problema (ver 0x1007h: No utilizar el operador condicional (ternario) ?:).

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
gaffgaff check archivo.cRegla 0x100Ch: espaciado del ternario (autofix).
gccgcc -Wall -WextraNo la detecta; es cuestión de formato.
Revisión manual? o : pegados a un operando.

Checklist de autocontrol

Reglas relacionadas