【发布时间】:2020-11-22 23:23:43
【问题描述】:
我已经编写了一些使用回调调用嵌套函数的代码。 但我没有得到预期的输出。
请查看代码:
#include <stdio.h>
#include <stdlib.h>
typedef int (*f_ptr)(int a, int b);
typedef int (*pair_ptr)(f_ptr);
pair_ptr cons(int a, int b)
{
int pair(f_ptr f)
{
return (f)(a, b);
}
return pair;
}
int car(pair_ptr fun)
{
int f(int a, int b)
{
return a;
}
return fun(f);
}
int main()
{
int a = 3;
int b = 4;
// It should print value of 'a'
printf("%d", car(cons(a, b))); // Error : It is printing '0'
return 0;
}
我也尝试过使用函数指针,但我也得到了与上面相同的输出。
【问题讨论】:
-
pair尝试使用已不存在的a和b。他们没有被抓到,是吗? -
C 没有 闭包 的概念,也没有使用它们的工具。您需要以其他方式“修复”
a和b -
请不要将有关 C 的问题标记为 C++。它们不是同一种语言。 (在 C++ 中,这将使用 lambda 或仿函数轻松处理,这两种解决方案都不是在 C 中有效的解决方案。)
-
一般来说,C语言不允许嵌套函数(虽然
gcc确实有这样的扩展)`强烈建议消除函数的“嵌套”
标签: c callback nested-function funcall