我有以下代码:警告关于C函数指针
#include <stdlib.h>
#include <stdio.h>
typedef void (*func_t)(void * data);
void func2(int * arg, func_t free_func) {
free_func(arg);
}
void func(int * a) {
printf("%d\n", *a);
}
int main(int argc, char ** argv) {
int a = 4;
func2(&a, func);
return 0;
}
编译这给了我 警告:传递`FUNC2' 的ARG 2从兼容的指针类型
这是为什么? int指针不应该与void指针兼容吗?
好的,所以类型之间的转换是隐含的,但涉及这些类型的函数签名之间不是隐含的?反直觉。 – 2010-11-09 20:52:10
这就是它的要义。是的,我从来没有说C很直观。 ;) – cdhowie 2010-11-09 20:53:07
我也不明白为什么我以前从来没有遇到过......可能与VC++没有抱怨它有关。 – 2010-11-09 20:54:39