【发布时间】:2011-12-27 02:34:59
【问题描述】:
我试图理解闭包和函数指针之间的区别,我遇到了this answer in SO
我不明白的是这段代码
BOOL (*lessThanTest)(int);
int lessThan = 100;
lessThanTest = &LessThan;
BOOL LessThan(int i) {
return i < lessThan; // compile error - lessThan is not in scope
}
考虑到lessThan是一个全局变量,为什么会出现编译错误,它可以从LessThan函数中访问,我错过了什么吗?
编辑
这不是我的代码,它取自 SO Function pointers, Closures, and Lambda 中的答案
【问题讨论】:
-
你能发布最低可编译代码吗? (注释掉给你错误的部分)
-
这甚至无法编译,因为
LessThan尚未在lessThanTest = &LessThan;之前声明 -
这是 C 中的无效代码。您可以使用 c++ 和仿函数获得与 c# 中相同的结果。
-
@neagoegab -- 它不应该是有效的 C,也不是他的例子。阅读链接的问题以了解更多上下文。
-
但它仍然是一个不完整规范的坏例子......闭包可以具有与仿函数相同的状态,而函数指针没有状态并且状态保持在全局变量中或传递为一个论点....
标签: c closures function-pointers