新的C 11标准支持lambda函数,我认为这是一个有用的功能.我知道C和C标准彼此不同但我不明白为什么C11不支持lambda函数.我认为它可能有很多用途.
有没有理由为什么C11标准的开发人员选择不包含此功能?
解决方法
这真的只是我的意见,因为我不知道委员会的想法.
一方面,Lisp自1958年诞生以来就一直支持lambda表达式.C编程语言诞生于1972年.因此lambda表达式实际上具有比C更长的历史.所以如果你问为什么C11不支持lambda表达式,同样的问题可以问一下C89.
另一方面,lambda表达式总是一个函数式编程事物,逐渐被命令式编程语言所吸收.一些“更高”的语言(例如Java,在计划的Java 8之前)还不支持它.
最后,C和C总是相互学习,所以它可能会在下一个C标准中.目前,您可以查看Blocks,这是Apple添加的非标准扩展程序.这是来自维基百科的示例代码:
#include <stdio.h> #include <Block.h> typedef int (^IntBlock)(); IntBlock MakeCounter(int start,int increment) { __block int i = start; return Block_copy( ^ { int ret = i; i += increment; return ret; }); } int main(void) { IntBlock mycounter = MakeCounter(5,2); printf("First call: %d\n",mycounter()); printf("Second call: %d\n",mycounter()); printf("Third call: %d\n",mycounter()); /* because it was copied,it must also be released */ Block_release(mycounter); return 0; } /* Output: First call: 5 Second call: 7 Third call: 9 */