假设我有一个功能
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);
并返回包含两个参数的函数,我们将其称为fun_out
,这样fun_out(x1, x2)
会计算出与myfun(x1, x2, x3, x4)
相同的结果。
是否有可能仅在C语言中执行此操作?如果没有,是否可以使用一些编译器扩展来实现?
答案 0 :(得分:1)
用于功能签名的广告,您将功能标识符放在“里面”:
int (* pass_last_elements(int (*myfun)(int, int, int, int), int x3, int x4) )(int, int);
关于:
返回两个参数的函数,我们称其为fun_out,这样fun_out(x1,x2)计算出的结果与myfun(x1,x2,x3,x4)相同
C语言没有闭包或lambda等,因此是不可能的。您必须自己通过传递附加上下文参数到函数或使用全局变量来传递上下文(即变量x1
和x2
的状态)。