#include <stdio.h>
int (*function_factory(int outer_args))(int){
int returned_function (int inner_args){
return outer_args + inner_args;
}
return &returned_function;
}
int main(void){
printf("%d\n",function_factory(1)(2));
return 0;
}
[当我尝试使用-pedantic和-Werror标志编译以上代码时,出现错误error: ISO C forbids nested functions
。就我的任务而言,假设我无法删除这两个标志。有没有一种方法可以返回将使用inner_args却仍可以访问external_args的函数?
您不能具有嵌套函数,但可以返回函数指针:
typedef int (*FuncPtr)(void);
int sample(void){
return 1;
}
FuncPtr choose(int f)
{
if (f == 1) return sample;
return NULL;
}
main()
{
FunPtr p = choose(1);
if (p) { printf("%d\n", p()); }
return 0;
}