填充外部文件中的函数指针数组 (C)



我一直在为函数指针而苦苦挣扎一段时间了。也许你们可以帮助我。

在我的项目中,我为同一设备提供了多种功能,并且每个功能都编写在自己的.c文件中。通用功能(适用于所有设备功能(是用 generic.c 编写的。

我想在通用 c 文件中创建一个函数指针数组,并在其他函数文件中填充该数组。因此,我可以根据通用文件中的设备函数标识符调用正确的函数。

我现在有什么:

// in generic.h:
typedef void (*func_ptr_t[])(arguments);
extern func_ptr_t devFunctions[3];

我想:

// in function1.c:
#include "generic.h"
devFunctions[1] = &functionName;

但随后它抱怨缺少类型说明符,并且数组初始值设定项必须是列表。如果我添加像这样的类型

func_ptr_t devFunctions[1] = &functionName;

我收到有关不完整的元素类型"func_ptr_t"的错误。

我无法从一个文件初始化整个数组列表,因为它是从多个文件填充的。

有人知道如何解决这个问题吗?

谢谢!

-编辑-

因为你不能在函数之外使用语句,所以我改变了我的应用程序。现在它不再使用数组,并在调用特定函数文件时更新 generic.c 中的函数指针。

所以最终结果:

在通用.h中:

typedef void (*func_ptr_t)(<function arguments>)

在通用.c中:

func_ptr_t devFunction;

在函数 1.c 中:

#include "generic.h"
extern func_ptr_t devFunction;
void functionToBeCalledFromMain( void ){
devFunction = functionName;
}
void functionName (void ){
// Function to be called from generic.c via function pointer
}

正如你们大多数人指出的那样,填充数组是一个不能放在函数之外的语句(duh...(。所以我想要的在这种情况下真的行不通。我重写了我的应用程序,以便在每次运行时使用我需要的函数更新函数指针(不再是数组(。省去很多麻烦:)

谢谢大家!

有关类型int f(int);的示例,您可以检查:

/* function definition */
int functionName(int arg)
{
/* do things */
return arg * 2;
}
/* create the type "function pointer int->int" */
typedef int (*func_ptr_t)(int);
/* create the array */
func_ptr_t devFunctions[3];
int main(void)
{   
/* associate the good function */
devFunctions[0] = &functionName;
/* call it with an arg */
return devFunctions[0](42);
}

把上面的评论放在一起,你可能想要

typedef void (*func_ptr_t)(arg_type_list);

最新更新