首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在C中有哪些函数式编程的工具?

在C中有哪些函数式编程的工具?
EN

Stack Overflow用户
提问于 2008-10-19 05:12:18
回答 11查看 57.6K关注 0票数 162

最近我一直在思考如何用C(而不是C++)进行函数式编程。显然,C是一种过程化语言,本身并不真正支持函数式编程。

是否有任何编译器/语言扩展将一些函数式编程构造添加到语言中?GCC提供了nested functions作为语言扩展;嵌套函数可以访问父堆栈帧中的变量,但这离成熟的闭包还有很长的路要走。

例如,我认为在C中真正有用的一件事是,在任何需要函数指针的地方,你都可以传递一个lambda表达式,创建一个衰减为函数指针的闭包。C++0x将包含lambda表达式(我认为这很棒);然而,我正在寻找适用于纯C语言的工具。

编辑澄清一下,我并不是试图解决C中更适合函数式编程的特定问题;我只是好奇如果我想这样做的话会有什么工具。

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-10-19 18:32:19

FFCALL允许您用C构建闭包-- callback = alloc_callback(&function, data)返回一个函数指针,这样callback(arg1, ...)就等同于调用function(data, arg1, ...)。不过,您必须手动处理垃圾收集。

与此相关的是,blocks已经被添加到苹果的GCC分支中;它们不是函数指针,但它们允许您传递lambda,同时避免手动构建和释放捕获变量的存储(实际上,一些复制和引用计数会发生,隐藏在一些语法糖和运行时库后面)。

票数 42
EN

Stack Overflow用户

发布于 2010-07-31 22:31:01

你可以使用GCC的嵌套函数来模拟lambda表达式,实际上,我有一个宏来做:

#define lambda(return_type, function_body) \
  ({ \
    return_type anon_func_name_ function_body \
    anon_func_name_; \
  })

像这样使用:

int (*max)(int, int) = lambda (int, (int x, int y) { return x > y ? x : y; });
票数 95
EN

Stack Overflow用户

发布于 2012-01-02 13:35:37

Hartel &Muller的书,Functional C,如今(2012-01-02)可以在http://eprints.eemcs.utwente.nl/1077/上找到(有一个到PDF版本的链接)。

票数 18
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/216037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档