C是否使用lambda表达式?

时间:2010-05-02 00:23:40

标签: c lambda

如果是的话,你怎么用? (语法)

另外,为什么C或者为什么不支持lambda表达式?

4 个答案:

答案 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 中工作正常。