是否有符合ISO C的方式来使函数返回嵌套在内部的函数的指针?

问题描述 投票:1回答:1
#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的函数?

c function pointers
1个回答
0
投票

您不能具有嵌套函数,但可以返回函数指针:

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;
}
© www.soinside.com 2019 - 2024. All rights reserved.