gpt4 book ai didi

c - 有没有办法在C中实现闭包

转载 作者:太空狗 更新时间:2023-10-29 16:22:14 26 4
gpt4 key购买 nike

我希望它能工作,但它没有:

#include <stdio.h>

typedef struct closure_s {
void (*incrementer) ();
void (*emitter) ();
} closure;

closure emit(int in) {

void incrementer() {
in++;
}

void emitter() {
printf("%d\n", in);
}

return (closure) {
incrementer,
emitter
};
}

main() {
closure test[] = {
emit(10),
emit(20)
};

test[0] . incrementer();
test[1] . incrementer();

test[0] . emitter();
test[1] . emitter();
}

它实际上确实编译并为 1 个实例工作......但第二个失败了。知道如何在 C 中获得闭包吗?

那真是太棒了!

最佳答案

使用 FFCALL ,

#include <callback.h>
#include <stdio.h>
static void incrementer_(int *in) {
++*in;
}
static void emitter_(int *in) {
printf("%d\n", *in);
}
int main() {
int in1 = 10, in2 = 20;
int (*incrementer1)() = alloc_callback(&incrementer_, &in1);
int (*emitter1)() = alloc_callback(&emitter_, &in1);
int (*incrementer2)() = alloc_callback(&incrementer_, &in2);
int (*emitter2)() = alloc_callback(&emitter_, &in2);
incrementer1();
incrementer2();
emitter1();
emitter2();
free_callback(incrementer1);
free_callback(incrementer2);
free_callback(emitter1);
free_callback(emitter2);
}

但通常在 C 中,您最终会将额外的参数传递给假闭包。


Apple 有一个非标准的 C 扩展名为 blocks ,它的工作方式很像闭包。

关于c - 有没有办法在C中实现闭包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4393716/

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