The following code warns on clang, but does not warn on GCC. typedef int unary_int_func(int arg); unary_int_func *func; void set_func(void *p) { func = p; } test.c:5:8: warning: incompatible pointer types assigning 'void *' to 'unary_int_func *' -- Seo Sanghyeon