【发布时间】:2019-11-27 09:53:44
【问题描述】:
function types 上的维基百科文章列出了一个有趣的“高阶函数组合函数”声明:
int (*compose(int (*f)(int), int (*g)(int)))(int);
作为一个学习练习,我想在一个测试程序中实现它,但失败了,编译器抛出了许多警告和错误。我的尝试:
int a(int x) {
return x + 1;
}
int b(int x) {
return x * 2;
}
int (*compose(int (*f)(int y), int (*g)(int z)))(int x) {
return (*f)(x) - (*g)(x);
}
int main(void) {
int x = 5;
int r = (*compose)((*a)(x), (*b)(x))(x);
printf("Compose result for x = %d: %d\n", x, r);
return 0;
}
如果维基百科的声明与 f(g(h(x))) 这样的简单函数组合有何不同,以及如何实现它,最好使用类似于我的简单程序,我将不胜感激。
【问题讨论】:
标签: c function function-pointers function-composition