一段时间以来,我一直在为函数指针而苦苦挣扎。也许你们可以帮助我。
在我的项目中,同一设备有多个功能,每个功能都写在自己的 .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 中的函数指针。
所以最终结果:
在 generic.h 中:
typedef void (*func_ptr_t)(<function arguments>)
在 generic.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
}
最佳答案
正如你们大多数人所指出的,填充数组是一个不能放在函数外部的语句(呃...)。所以我想要的在这种情况下并不会真正起作用。我重写了我的应用程序以在每次运行时使用我需要的函数更新函数指针(不再是数组)。省了很多麻烦:)
谢谢大家!
关于c - 在外部文件中填充函数指针数组(C),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51151480/