如果是的话,你怎么用? (语法)
另外,为什么C或者为什么不支持lambda表达式?
答案 0 :(得分:10)
不,C不支持lambda表达式。
如果你愿意使用C ++,Boost有一个模拟lambdas的库。此外,C ++ 0x将内置支持lambda表达式。
当时C语言中没有对lambda表达式支持的巨大需求,因此该语言不支持它。
答案 1 :(得分:5)
C不支持lambda表达式,也不支持动态创建函数的任何其他方式(在语言标准内) - 根据标准,所有函数都是在编译时创建的。我想原因是保持语言小巧,简单,精简和快速,几乎不需要任何“运行时库”支持 - 这对于在编程操作系统,设备驱动程序,嵌入式应用程序和编程中广泛使用的语言至关重要等等。
答案 2 :(得分:3)
不,C没有lambda表达式(或任何其他方式来创建闭包)。
这可能是因为C是一种低级语言,可以避免可能性能不佳的功能和/或使语言或运行时系统更复杂。
答案 3 :(得分:0)
我今天看到了: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 中工作正常。