C 使用 lambda 表达式吗?

问题描述 投票:0回答:5

如果有的话,你如何使用它? (语法)

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

c lambda
5个回答
11
投票

不,C 不支持 lambda 表达式。

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

当时 C 语言对 lambda 表达式支持的需求并不大,所以该语言不支持。


5
投票

C 不支持 lambda 表达式,也不支持任何其他方式(在语言标准内)动态创建函数——根据标准,所有函数都是在编译时创建的。我想原因是保持该语言小、简单、精简且非常快,几乎不需要任何“运行时库”支持——这对于广泛用于编程操作系统、设备驱动程序、嵌入式应用程序和应用程序的语言至关重要。依此类推。


3
投票

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

这很可能是因为 C 是一种低级语言,它避免了可能导致性能不佳和/或使语言或运行时系统更加复杂的功能。


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 中运行良好。


0
投票
lambda( float, (float x), {return 2 * x;} );
© www.soinside.com 2019 - 2024. All rights reserved.