c - 警告 : initialisation from incompatible pointer type via function table in c

标签 c

(代码示例尚未经过测试 - 仅作为示例)

我有几个这样的声明:

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.

生成的代码也运行良好,但我怀疑声明有问题。 我可以找到几个关于如何构建不传递参数的函数表的示例,但我正在努力寻找一个示例来说明如何使用一个函数表。

最佳答案

很可能 func1func2 的声明将它们声明为以 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/

相关文章:

c - 为什么以及在何种意义上 pthread_t 是不透明类型?

c - 重复添加列表中的数字?

c - 以编程方式安全地调整格式字符串中的小数位

c - 如何从C中的scanf输入中获取所有0

关闭使用 shm_open() 打开的 FD(文件描述符),而不使用 close()?

c - 如何通过进程的回溯确定传递函数参数的值?

c - 如何为无符号整数设置默认值 "NULL"(例如 : NaN to floating points)?

c++ - 函数原型(prototype)和函数实现签名不一致地使用 const 可以吗?

c - C中是否有任何可靠的大整数实现?

C - *x++ = *y++ 是否定义明确?