下面给出了一个理解回调函数和函数pointers.The程序的测试程序。
我的问题是在分配
cb_display = (void*)display_struct;我必须将函数转换为void*。为什么在函数的返回类型为空时也需要这样做?
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct {
int a;
char b[16];
}myst_t;
void (*cb_display)(void*);
void display_struct(myst_t *st){
fprintf(stdout, "a -> %d b -> %s \n",st->a,st->b);
}
int main()
{
myst_t myst;
myst.a = 789432;
strncpy(myst.b,"helloabcd",9);
cb_display = (void*)display_struct;
cb_display(&myst);
return 0;
}发布于 2015-09-14 21:08:46
cb_display = (void*)display_struct;实际上在C中也是无效的。不能将void *分配给函数指针。
若要解决问题,请将函数指针声明为:
void (*cb_display)();这意味着它匹配一个函数,该函数不返回值,并接受未指定数量的参数。那你就不需要任何演员了。另外,请注意,正如Olaf在注释中指出的那样,带有()的函数声明器虽然有效,但它是一个过时的C特性。
当然,如果只传递带有display_struct参数的函数(如myst_t * ),也可以将cb_display声明为:void (*cb_display)(myst_t *);
发布于 2015-09-22 01:26:50
变化空洞(Cb_display)(无效);
(cb_display)( void );
可能会起作用。
https://stackoverflow.com/questions/32573922
复制相似问题