V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Akagi201
V2EX  ›  问与答

如何理解和使用闭包? 最好用 C 语言描述

  •  
  •   Akagi201 · 2014-12-01 15:04:54 +08:00 · 2992 次点击
    这是一个创建于 3644 天前的主题,其中的信息可能已经有所发展或是发生改变。
    今天看到一个小的C的项目, https://github.com/clibs/commander, 上面写到

    Closure

    cmd.data is a void * so pass along a struct to the callbacks if you want.

    这个项目的作者是搞node跟js的, 可能引进了一些思想到C来, 不过我没有看懂这怎么就叫闭包了?

    在我看来, 只是回调函数的参数里有个成员是个空指针, 可以传任何值. 这样就算闭包吗?
    5 条回复    2014-12-01 18:23:10 +08:00
    GuangXiN
        1
    GuangXiN  
       2014-12-01 15:54:14 +08:00
    C语言不支持闭包吧
    ggarlic
        2
    ggarlic  
       2014-12-01 16:02:18 +08:00   ❤️ 1
    回调参数中的空指针只能算是“类似”闭包
    gcc对c作了扩展来支持闭包,名叫Nested Functions
    https://gcc.gnu.org/onlinedocs/gcc/Nested-Functions.html
    1989922yan
        3
    1989922yan  
       2014-12-01 17:13:14 +08:00   ❤️ 1
    作用域扩大的一种方法。
    Akagi201
        4
    Akagi201  
    OP
       2014-12-01 18:11:46 +08:00
    @1989922yan 有点这种感觉
    tabris17
        5
    tabris17  
       2014-12-01 18:23:10 +08:00
    闭包的核心是upval
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3017 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 10:54 · PVG 18:54 · LAX 02:54 · JFK 05:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.