2010-05-02 98 views

回答

10

不,C不支持lambda表达式。

如果你愿意使用C++,Boost有一个模拟lambda表达式的库。另外,C++ 0x将内置对lambda表达式的支持。

当时C语言对lambda表达式的支持并不是很大,所以语言不支持它。

+1

...爱你。现在我喜欢Stack Overflow,因为这很快! – shosh 2010-05-02 00:50:51

3

不,C没有lambda表达式(或任何其他方式来创建闭包)。

这很可能是因为C是一种低级语言,可以避免性能不佳并且/或者使语言或运行时系统更加复杂的功能。

5

C不支持lambda表达式,也不支持任何其他方式(在语言标准中)动态创建函数 - 每个标准的所有函数都是在编译时创建的。我想这是因为语言小巧,简单,精简并且速度非常快,几乎不需要任何“运行时库”支持,这对于在操作系统,设备驱动程序,嵌入式应用程序编程中广泛使用的语言至关重要。等等。

+5

Lambda表达式不需要动态创建函数。它只是创建一个引用已编译的(可能是无名的)函数的对象。 – 2010-05-02 00:32:51

+0

@Mike,在C中,你可以通过一个指针来引用现有的函数(的确,函数名称的_mention_“decay”指向它的指针,所以这是非常优雅和可行的)。 – 2010-05-02 00:57:57

+1

我认为迈克有一点。在理论上,你可以用C语言的lambda风格的语法,没有闭包,要在表达式中定义一个像'x => x * x'这样的函数,并且计算一个指向该函数的指针,所有这些都不会破坏你提到的约束。只有当你希望你的lambda访问它的周围范围时,使用一个典型的仅包含代码地址的C函数指针是不可能的。这种上下文无关的功能是否应该被称为“lambdas”,我不知道。 – 2010-05-02 01:10:13