(代码示例尚未经过测试 - 仅作为示例)
我有几个这样的声明:
void (* const a[])(void) = {func1, func2};
void func1() {};
void func2() {};
a[0]();
编译(如果它是真正的代码......)并且应该运行 func1。
但是,如果我想传递如下参数:
a[0](int 10);
然后我更改我的声明:
void (* const a[])(int) = {func1, func2};
void func1(int foo) {};
void func2(int foo) {};
a[0](10);
这也可以编译,但我收到以下警告:
warning: initialisation from incompatible pointer type.
生成的代码也运行良好,但我怀疑声明有问题。 我可以找到几个关于如何构建不传递参数的函数表的示例,但我正在努力寻找一个示例来说明如何使用一个函数表。
最佳答案
很可能 func1
和 func2
的声明将它们声明为以 void
作为参数,而不是以 int
。你可能有
void func1(void);
void func2(void);
在一些头文件中。相反,你需要
void func1(int);
void func2(int);
这是因为声明
void (*const a[])(int)
表示 a
是一个函数指针数组,接受 int
并返回 void
。
关于c - 警告 : initialisation from incompatible pointer type via function table in c,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8547288/