c - 如何创建一个返回函数指针数组中的函数指针的函数

标签 c function-pointers

我需要使用整数调用函数。 我对 C 语言真的很陌生,函数指针非常困惑。

目标

  1. 我有很多乱七八糟的函数,如果我把它们写在 main.c 中,一切都会变得困惑。
  2. 所以我把那些乱七八糟的函数写进另一个c文件messy_functs.c
  3. main.c 中,我需要选择这些困惑的函数之一并调用它,具体取决于从我的算法获得的整数。这些函数通常需要两个参数:int inputint *output
  4. 被调用函数会将结果存储在 output 中,并作为指针传递

我的计划

  1. messy_functs.c 中,创建一个包含全局范围内的函数指针的数组 function_list[]
  2. messy_functs.c中。创建一个函数 get_function_by_index(int function_index),返回按参数索引的函数指针。
  3. main.c 中,调用 messy_function 并传递 function_index,然后通过传递两个参数 int 调用返回的函数来获取结果输入int *输出

问题

我的代码如下。但因错误而失败 错误:函数参数过多。。请忽略一些错别字。

// main.c
#include "messy_functs.h"
...

void get_result(int func_idx, int input, int *output)
{
    (*get_function_by_index(func_idx))(input, output);
}

int main() {
    int result, data, func_idx;

    ...

    func_idx, data = some_algorithm_i_made(~~);
    get_result(func_idx, data, &result);
    printf("Got the result %d\n", result);

}

============
// messy_functs.c
#define FUNCTION_NUM 100
const void (*function_list[FUNCITON_NUM])(int input, int *output) = {func1, func2, func3, func_m, func_qwer, func_abab, ...(many functions) };

void (*get_function_by_index(int func_id)){
    return function_list[func_id];
}

void func1(int input, int *output) {...}
void func2(int input, int *output) {...}
(... other functions)

我已尝试修复,但遇到了不同的错误,例如void value not returned as it should be。 我知道一定还有其他好帖子可以解决我的问题。我读过很多关于函数指针和函数指针数组的文章,但没能读懂。

最佳答案

数组的正确定义是:

void (* const function_list[FUNCITON_NUM])(int input, int *output) = ...

对于get_function_by_index将是:

void (*get_function_by_index(int func_id))(int, int*)

当传递或返回函数指针时,为函数指针类型提供 typedef 非常有帮助,可以使其更易于管理。

可以在messy_functs.h中为函数指针类型创建typedef:

typedef void (*messy_func)(int, int *);

然后在messy_funct.c中,使用此类型作为数组:

const messy_func function_list[FUNCITON_NUM] = {func1, func2, func3, func_m, ... };

对于get_function_by_index的返回类型

messy_func get_function_by_index(int func_id) {
    return function_list[func_id];
}

你可以这样调用这个函数:

void get_result(int func_idx, int input, int *output)
{
    get_function_by_index(func_idx)(input, output);
}

关于c - 如何创建一个返回函数指针数组中的函数指针的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66970449/

相关文章:

c - 内联函数 C 的函数指针

c++ - 从用户获取字符串中的多个单词的代码

如果读取 0 为空,C 返回 null

c - 通过函数指针传递附加参数是否合法/在 C 中定义?

c++ - 引用成员函数?

c++ - 如何创建一个充满 C 风格函数指针和 lambda 的 vector (有和没有捕获)

编译器错误 : "‘e’ was not declared in this scope"in C code

c - 将结构数组传递给 C 中不同文件中的函数

C指针-Segment错误的解决办法是什么

go - 如何在最新的 Go 周报中比较两个函数的指针相等性?