Josep Portella

Un vestigio del lenguaje C clásico

Octubre de 2011

© 2011 Josep Portella Florit
Esta obra está bajo una licencia de
Atribución-SinDerivadas 3.0 Creative Commons.

En la mayoría de las estructuras de control de ciertos lenguajes de programación con sintaxis basada en C, como por ejemplo PHP o JavaScript, existe la posibilidad de agrupar sentencias entre llaves ({}) o bien poner una sola sentencia sin llaves. Sin embargo, en la declaración de funciones no existe esta opción, tal como pasa en el lenguaje C; las llaves son obligatorias aunque haya una sola sentencia.

Intuyo que los diseñadores de estos lenguajes no se pararon a pensar si debían o no debían dar la opción de omitir las llaves en funciones de una sola sentencia, sino que simplemente vieron que en C se hacía así y no le dieron más vueltas.

Técnicamente no habría problema en dejar omitir las llaves en la declaración de funciones de una sola sentencia en PHP y JavaScript. De hecho, se permite hacerlo en el nuevo estándar 1.8 de JavaScript. Por otro lado, en C no se puede por compatibilidad con el C clásico o K&R, el lenguaje tal como fue definido en la primera edición de El Lenguaje de Programación C de Kernighan y Ritchie.

Si comparamos la declaración de una función que devuelve el cuadrado de un entero en C estándar (ANSI C)

int
square (int x)
{
  return x * x;
}

con la misma función en C clásico

int
square (x)
     int x;
{
  return x * x;
}

podemos ver que cambia el lugar donde se declara el tipo del parámetro, y que en C clásico se necesitan las llaves para distinguir un declaración de tipo de parámetro de una sentencia. En el C estándar esto ya no se hace así, de forma que si no necesitase ser compatible con el estilo clásico de declaración de funciones, entonces sería posible omitir las llaves en funciones de una sola sentencia.