闭包

C 语言中是没有闭包的

然而,可以通过一些技巧来模拟闭包的行为:

  1. 使用函数指针和结构体

    • 可以定义一个结构体,其中包含数据和函数指针。函数指针可以指向操作结构体中数据的函数。这样,通过传递这个结构体,可以在一定程度上模拟闭包的行为,因为这些函数可以访问结构体中的数据,就像闭包可以访问外部函数的变量一样。

    #include <stdio.h>
    
    typedef struct {
        int data;
        void (*modifyData)(struct MyStruct *);
    } MyStruct;
    
    void modifyDataFunc(MyStruct *s) {
        s->data++;
    }
    
    int main() {
        MyStruct s = {.data = 5,.modifyData = modifyDataFunc};
        s.modifyData(&s);
        printf("%d\n", s.data);
        return 0;
    }

虽然这种方式可以实现类似闭包的效果,但与真正的闭包相比,它更加复杂和不直观,并且在语法和语义上有很大的不同。

总的来说,C 语言本身没有内置的闭包支持,但可以通过特定的编程技巧来模拟类似的行为。

Last updated