int *my_func(int x, void (*other_func)(int a, int b)){
return 0;
}
void func2(int val1, int val2){
printf("blah");
}
int main(){
my_func(1,func2);
return 0;
}
int *my_func(int x, void (*other_func)(void * a, int b)) { return 0;}
int func2(int val1, int val2) {}
int main (void) {
my_func (42, func2);
return 0;
}
通过以下编辑,将其更改为int并返回void,没有问题:
int my_func(int x, void (*other_func)(int a, int b)) { return 0;}
void func2(int val1, int val2) {}
int main (void) {
my_func (42, func2);
return 0;
}
编译前者可获得:
warning: passing argument 2 of 'my_func' from incompatible pointer type
3条答案
按热度按时间jecbmhm31#
这是因为函数原型不匹配:
不同于:
一个需要一个
void*
和int*
,而另一个需要两个int
。编辑:
返回类型也不匹配。
编辑2:
**因为你已经修复了这两个错误,所以这个答案是断章取义的。**我刚刚用这两个修复测试了它,它编译:
tjvv9vkg2#
您的原始代码将
void*
作为所传递函数的第一个参数,并将int
作为返回类型,这导致了您的问题:通过以下编辑,将其更改为
int
并返回void
,没有问题:编译前者可获得:
编译后一种方法不会给您任何错误或警告,并且目标文件创建得很好。
lskq00tm3#
通常(1)(2)我们使用“typedef”来确保我们拥有的函数类型与其他函数的参数类型相匹配。
意思和