2010-05-02 17 views

Respuesta

10

No, C no tiene soporte para expresiones lambda.

Si está dispuesto a usar C++, Boost tiene una biblioteca que emula lambdas. Además, C++ 0x tendrá soporte integrado para expresiones lambda.

No había una gran demanda de soporte de expresiones lambda en C en ese momento, por lo que el lenguaje no lo admitía.

+1

... te amo. Y ahora me encanta Stack Overflow, ¡porque fue rápido! – shosh

3

No, C no tiene expresiones lambda (ni ninguna otra forma de crear cierres).

Esto es probable porque C es un lenguaje de bajo nivel que evita características que pueden tener un mal rendimiento y/o hacer que el lenguaje o el sistema de tiempo de ejecución sean más complejos.

5

C no admite expresiones lambda, ni de ninguna otra manera (dentro del estándar del lenguaje) para crear funciones dinámicamente: todas las funciones, según el estándar, se crean en tiempo de compilación. Supongo que la razón es mantener el lenguaje pequeño, simple, delgado y muy rápido, sin apenas el soporte de "biblioteca de tiempo de ejecución" necesario, crucial para un lenguaje que se usa ampliamente en la programación de sistemas operativos, controladores de dispositivos, aplicaciones integradas y etcétera.

+5

La expresión Lambda no requiere la creación dinámica de una función. Simplemente crea un objeto que hace referencia a una función (posiblemente anónima) que ya está compilada. –

+0

@Mike, en C puede referirse a las funciones existentes mediante un puntero (de hecho, una _mencia_ del nombre de la función "decae" en un puntero a ella, por lo que es bastante elegante y factible). –

+1

Creo que Mike tiene un punto. En teoría, podría tener en C una sintaxis de estilo lambda sin cierres, para definir dentro de una expresión una función como 'x => x * x' y evaluar a un puntero a esa función, todo ello sin romper la restricción que menciona. Es solo cuando desea que su lambda acceda a su alcance circundante que se vuelve imposible con un puntero de función C típico que consiste solo en la dirección del código. Si estas funciones libres de contexto deberían llamarse "lambdas" o no, no lo sé. –