在网上查了很多概念,表示看不懂,什么自由变量,什么词法上下文,哇哦~
用自己的语言,结合网上各位的总结,给一个简单的对应C语言中的定义吧,闭包就是利用嵌套函数这种形式,对于自己作用域之外的变量进行操作,表现代码为
点击(此处)折叠或打开
-
void* caller()
-
{
-
int temp = 1314;
-
void callee() {
-
printf("%d\n", temp);
-
}
-
return test;
- }
点击(此处)折叠或打开
-
#include <stdio.h>
-
void* caller() {
-
int cnt = 0;
-
void callee() {
-
cnt++;
-
printf("%d\n", cnt);
-
}
-
return callee;
-
}
-
int main()
-
{
-
void(*callee)(void) = caller();
-
callee();
-
return 0;
- }
自己浅谈下闭包的实现吧(参考别人的思路),当调用闭包时,有一个调用链的关系,以上面的代码为例,就是,callee->caller->全局,直到找到cnt这个变量为止,所以说,需要保存许多信息,开销比较大。
思考:
1、首先,C中不能嵌套定义函数(GCC扩展好像可以),自己没有尝试,之前在一本什么hack的书中看过这种代码,这是把代码写到栈上,还有把代码写到堆上的呢,自己读书少哇~
2、其次,闭包有什么用,什么?Lambda表达式?我读书少,你不要骗我。
3、闭包和协程的关系,路过的大神,给个链接呗!
欢迎拍砖!欢迎讨论!
附上参考链接,代码都是盗人家的,不好意思~~~
/> /> /> http://www.cnblogs.com/super-d2/archive/2012/06/12/2546236.html