在 C 中是否可以部分应用高阶函数?

Is partial application of higher order functions possible in C?

假设我有一个函数

int myfun (int arg1, int arg2, int arg3, int arg4) {
    /* function body */
}

并且我想编写一个具有签名

的函数pass_last_elements()
int (*)(int, int) pass_last_elements(int (*myfun)(int, int, int, int), int x3, int x4);

和 returns 两个参数的函数,我们称它为 fun_out,这样 fun_out(x1, x2) 计算出与 myfun(x1, x2, x3, x4).

相同的结果

是否可以只用 C 来做这个?如果没有,是否可以使用一些编译器扩展来实现?

函数签名的广告,你输入函数标识符"inside":

int (* pass_last_elements(int (*myfun)(int, int, int, int), int x3, int x4) )(int, int);

至于:

returns a function of two arguments, let's call it fun_out, such that fun_out(x1, x2) computes the same result as myfun(x1, x2, x3, x4)

C语言没有闭包和lambdas等,所以不可能。您必须自己传递上下文(即变量 x1x2 的状态),方法是向函数添加额外的上下文参数或使用全局变量。