为什么我不能初始化包含 C 函数指针的结构数组?



my_functions.h

void * f1 (int * param);
void * f2 (int * param);
void * f3 (int * param);
void b1(int * param);
void b2(int * param);
void b3(int * param);

my_prog.c

#include <my_functions.h>
// Typedef my function pointers
typedef void * (*foo)(int*);
typedef void (*bar)(int*);
// Declare the structure that will contain function pointers
typedef struct _my_struct
{
    int tag;
    foo f;
    bar b;
}my_struct;
// Declare and initialize the array of my_struct
my_struct array[] =
{
    {1, f1, b1},
    {2, f2, b2},
    {3, f3, b3}
};

编译器说:

警告:从不兼容的指针类型初始化

我看了看:

  • C结构中的函数指针
  • 在C中初始化函数指针
  • 如何初始化指向函数的指针数组

但我还是看不出我错过了什么
对我来说,当我尝试初始化数组时,所有的类型和函数都是已知的
初始化不能在函数外完成吗?

[EDIT]我在Linux上,使用GCC 4.9的arm嵌入式版本。

好吧,所以我的代码在我的PC上运行得很好,实际上是我用于嵌入式目标的arm gcc编译器抛出了这个错误,因为如果没有显式强制转换,它似乎无法识别函数指针的类型:

修复方法如下:

my_struct array[] =
{
    {1, (foo)f1, (bar)b1},
    {2, (foo)f2, (bar)b2},
    {3, (foo)f3, (bar)b3}
};

相关内容

  • 没有找到相关文章