gpt4 book ai didi

c - C语言中的LAMBDA语法

转载 作者:行者123 更新时间:2023-11-30 18:47:14 25 4
gpt4 key购买 nike

我找到了一个关于在c中模拟lambda的教程,但我无法完全理解声明方式。为什么回调提到了两次,大括号“范围”和外括号有什么用。

教程链接: https://blog.noctua-software.com/c-lambda.html

顺便说一句,这段代码可以在 gcc 4.9.2 编译器上运行。

#define LAMBDA(c_) ({ c_ _;})
void func(int nb, void (*f)(int)) {
int i;
for (i = 0; i < nb; i++) f(i);
}


int main()
{
func(4, ({ //parentheses ??
void callback(int v) { printf("%d\n", v); }
callback; // callback here what it does mean?
}));
}

声明的最后一步。

#define LAMBDA(c_) ({ c_ _;})
int main()
{
func(4, LAMBDA(void _(int v) {
printf("%d\n", v);
}));
}

最佳答案

它是一个 GCC 扩展,'compound statements in expressions' .

TL;DR:当表达式中遇到({...})时,执行里面的所有语句,并将最后一条语句的值视为的值>({...}) 本身。

例如:

int x = ({int a = 1, b = 2; a + b;}); // x = 3
<小时/>

通常情况下,您不允许在其他函数中定义函数,但由于another GCC extension而可以编译。 .

关于c - C语言中的LAMBDA语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49263179/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com