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}
};
编译说:
警告:从不兼容的指针类型初始化
我看了看:
但我仍然无法看到我错过的...... 对我来说,当我尝试初始化数组时,所有类型和函数都是已知的 init不能在函数外部完成吗?
[编辑] 我在Linux上,使用嵌入式版本的GCC 4.9。
答案 0 :(得分:2)
好的,所以我的代码在我的电脑上工作正常,它实际上是我用于我的嵌入式目标的arm-gcc编译器抛出此错误,因为它似乎无法识别函数指针的类型而没有显式投:
以下是修复:
my_struct array[] =
{
{1, (foo)f1, (bar)b1},
{2, (foo)f2, (bar)b2},
{3, (foo)f3, (bar)b3}
};