如果有的话,你如何使用它? (语法)
另外,为什么 C 支持或不支持 lambda 表达式?
不,C 不支持 lambda 表达式。
如果您愿意使用 C++,Boost 有一个模拟 lambda 的库。此外,C++0x 将内置对 lambda 表达式的支持。
当时 C 语言对 lambda 表达式支持的需求并不大,所以该语言不支持。
C 不支持 lambda 表达式,也不支持任何其他方式(在语言标准内)动态创建函数——根据标准,所有函数都是在编译时创建的。我想原因是保持该语言小、简单、精简且非常快,几乎不需要任何“运行时库”支持——这对于广泛用于编程操作系统、设备驱动程序、嵌入式应用程序和应用程序的语言至关重要。依此类推。
不,C 没有 lambda 表达式(或任何其他创建闭包的方式)。
这很可能是因为 C 是一种低级语言,它避免了可能导致性能不佳和/或使语言或运行时系统更加复杂的功能。
我今天看到了这个:https://github.com/wd5gnr/clambda/blob/master/clambda2.c
请参阅上面链接的代码:
#include <stdio.h>
float thelist[]={ 3.141, 6.02, 42.0, 0.7 };
#define lambda(lambda$_ret, lambda$_args, lambda$_body)\
({\
lambda$_ret lambda$__anon$ lambda$_args\
lambda$_body\
&lambda$__anon$;\
})
float average_apply(float (*fn)(float inp))
{
int i,n=sizeof(thelist)/sizeof(thelist[0]);
float avg=0.0;
for (i=0;i<n;i++)
{
avg+=fn(thelist[i]);
printf("Running sum=%f\n", avg);
}
return avg/n;
}
int main(int argc, char *argv[])
{
printf("%f\n",average_apply(lambda(float,(float x),{ return 2*x; })));
printf("%f\n",average_apply(lambda(float,(float x),{ return x/3.0; })));
return 0;
}
并且在 gcc 中运行良好。
lambda( float, (float x), {return 2 * x;} );