#include "stdio.h"
typedef void (*pfun)(int a);
struct t{
int a;
int b;
};
void bfun(struct t a, int c)
{
printf("===bfun %d %d %d\n", a.a, a.b, c);
}
void cfun(pfun f, int a)
{
f(a);
}
void main()
{
cfun(bfun, 1);
}
运行结果如下:
test_call_back.c: In function 'main':
test_call_back.c:22:10: warning: passing argument 1 of 'cfun' from incompatible pointer type
cfun(bfun, 1);
^
test_call_back.c:14:6: note: expected 'pfun' but argument is of type 'void (*)(struct t, int)'
void cfun(pfun f, int a)
^
===bfun 1 1997188750 0
回调函数传入类型不同,不报错,只有警告。