首页 > 代码库 > C 返回函数与闭包的考虑

C 返回函数与闭包的考虑

#include <stdio.h>

typedef int (*fun)();

fun closure(int i)
{
    int squ()
    {
        return i*i;
    }
    return squ;
}

int main()
{

    fun f = closure(2);

    printf("closure %d\n", f());

    return 0;
}

C中函数的嵌套定义可以实现类似闭包的效果,只是如果函数是定义在一个循环中时,如:

    for (; i>arg-2; i--)
    {
        int squ()
        {
            return i*i;
        }
        arr[arg-i]=squ;
    }

在最后使用arr函数数组时始终是指向最后定义的一个squ函数。查看2次循环时,发现squ始终指向同一个地址,所以此处认为C在处理时会将前面定义的squ函数覆盖。

这个现象和Python中的返回函数中,引用了可变化变量的现象不同,Python中在循环中定义的函数是指向不同的地址的。

C 返回函数与闭包的考虑