C,函数返回另一个函数

时间:2013-10-28 15:57:22

标签: c properties

为什么有些编程语言会禁止返回子程序?然而语言C 不是吗?

此外,C如何实现返回函数的函数?

2 个答案:

答案 0 :(得分:2)

我认为你的意思是功能指针? c可以做到这一点的原因是当然c有指针,你可以自己声明它们,例如java只有一些隐藏的指针

编辑我在互联网上找到了一个例子

#include <stdlib.h>
#include <stdio.h>

struct container
{
  struct container (* call)(int);
};

struct container look_I_return_myself(int p)
{
  struct container result;

  printf("Here's some integer someone gave me, not sure what to do with it: %d.\n", p);

  result.call = look_I_return_myself;
  return result;
}

int main(void)
{
  look_I_return_myself(3).call(4).call(5);
  return EXIT_SUCCESS;
}

答案 1 :(得分:2)

C函数无法返回其他函数;他们只能返回指向其他功能的指针。它们是有区别的。

C设计背后的一个指导原则是让实施变得容易。这是C编译器可以在如此多种平台上找到的主要原因。这也是C提供如此少的抽象的主要原因。

显然,可能设计处理函数类型的语言,如任何其他数据类型(Haskell,Lisp,Java,C#等)。 C的设计者选择不这样做,因为他们试图解决的问题(用高级语言实现操作系统)并没有真正要求那种复杂程度,特别是考虑到他们正在工作的资源的局限性在那个时候。请记住,C是20世纪70年代早期的产物。