I have a small program that uses function pointers. #include #include #include typedef struct _myst { int a; char b[10]; }myst; void cbfunc(myst *mt) { fprintf(stdout,"called %d %s. \n",mt->a,mt->b); } int main() { /* func pointer */ void (*callback)(void *); myst m; m.a=10; strcpy(m.b,"123"); /* point to callback function */ callback = (void*)cbfunc; /* perform callback and pass in the param */ callback(&m); return 0; } The function pointer decleration void (*callback)(void*); declares a function pointer callback that takes a generic-pointer and returns void. While assigning cbfunc to callback callback = cbfunc; I get the warning warning: assignment from incompatible pointer type [enabled by default] If I use the following callback = (void*)cbfunc; It compiles without any warnings.I am using gcc (4.6.3) and compiling with CFLAGS=-g -O3 -Wall Can someone explain the reason for this?