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 0x200Fh: Prohibición de paréntesis superfluos en sentencia return

Funciones, contratos y modularizacion (0x20XX)

Universidad Nacional de Río Negro

0x200Fh: Prohibición de paréntesis superfluos en sentencia return

Enunciado normativo

NO DEBEN envolverse en paréntesis la expresión de una sentencia return. DEBE escribirse return expresion; y usar paréntesis solo cuando la propia expresión los necesite por precedencia.

¿Por qué existe esta regla?

El problema

return es una palabra clave de control de flujo, no una llamada a función. Por eso return (x); no invoca nada: los paréntesis son ruido sintáctico. Ese ruido tiene dos costos. Primero, sugiere que return es una función, una confusión conceptual que reaparece cuando el estudiante escribe exit (0) o sizeof (int) con el mismo estilo. Segundo, un par de paréntesis de más esconde la expresión real: cuanto más envuelto está el cálculo, más difícil es leer la precedencia.

Consecuencias de violarla

Tipo de consecuenciaEfecto concreto
ConceptoRefuerza la idea equivocada de que return es una función.
LegibilidadEl paréntesis compite con los de la expresión y distrae.
ConsistenciaUnos return con paréntesis y otros sin ellos delatan descuido.
Ruido diffsEl autofix reescribe líneas que no aportaban cambio semántico.

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

La gramática de C11 define return con una expresión opcional que ya admite paréntesis como parte de la propia expresión (§6.8.6.4). La norma no prohíbe return (x);: es perfectamente válido. La cátedra lo marca por estilo, en línea con 0x301Bh: Prohibición de casts de tipo innecesarios o redundantes (casts innecesarios) y con la idea de que la forma sintáctica debe reflejar la semántica. Tiene corrección automática porque la transformación no cambia el significado.

Alcance y excepciones

Aplica a la expresión completa. No se eliminan los paréntesis internos que la expresión necesita:

La regla solo quita el par que envuelve toda la expresión.

Ejemplos exhaustivos

❌ Contraejemplo 1 — Paréntesis envolvente simple

int suma(int a, int b)
{
    return (a + b);
}

Por qué falla: el paréntesis exterior no cumple ninguna función. La expresión a + b es la misma con o sin él, y sugiere erróneamente que return es una llamada.

❌ Contraejemplo 2 — Paréntesis en cada rama

int maximo(int a, int b)
{
    if (a > b) {
        return (a);
    }
    return (b);
}

Por qué falla: además de los paréntesis superfluos, hay dos puntos de salida (0x200Ch: Cada función debe tener a lo sumo un return). El estilo de return (variable); es puro ruido y no aporta claridad sobre cuál es el mayor.

✅ Ejemplo conforme 1 — Retorno directo

int suma(int a, int b)
{
    return a + b;
}

La expresión se lee tal cual es. El estilo coincide con el de las funciones de la biblioteca estándar.

✅ Ejemplo conforme 2 — Paréntesis solo donde la precedencia lo exige

int escala(int a, int b, int c)
{
    return (a + b) * c;
}

double mitad(int x)
{
    return (double)x / 2.0;
}

En el primer caso el paréntesis define la precedencia de la suma; en el segundo, el cast (double) es necesario. Ninguno es el par envolvente que la regla prohíbe.

⚠️ Casos límite

Cómo detectarla

HerramientaComandoSeñal
gaffgaff check archivo.creturn ( que envuelve toda la expresión.
gaffgaff fix archivo.cElimina el par superfluo.
grepgrep -nE "return \(.*\);" archivo.cRevisar manualmente cuáles son envolventes.

Checklist de autocontrol

Reglas relacionadas