在C中使用qsort时发出警告

我写了比较函数

int cmp(const int * a,const int * b) { if (*a==*b) return 0; else if (*a < *b) return -1; else return 1; } 

我有我的声明

 int cmp (const int * value1,const int * value2); 

我在我的程序中调用qsort就像这样

 qsort(currentCases,round,sizeof(int),cmp); 

当我编译它时,我收到以下警告

 warning: passing argument 4 of 'qsort' from incompatible pointer type /usr/include/stdlib.h:710: note: expected '__compar_fn_t' but argument is of type 'int (*)(const int *, const int *)' 

该程序运行得很好,所以我唯一担心的是为什么它不喜欢我使用它的方式?

cmp函数的原型必须是

 int cmp(const void* a, const void* b); 

您可以在qsort的调用中强制转换它(不推荐):

 qsort(currentCases, round, sizeof(int), (int(*)(const void*,const void*))cmp); 

或者将void指针强制转换为cmp中的int-pointers(标准方法):

 int cmp(const void* pa, const void* pb) { int a = *(const int*)pa; int b = *(const int*)pb; ... 

根据手册页, __compar_fn_t定义为: typedef int(*) __compar_fn_t (const void *, const void *)

你的cmp指定了int*参数。 它不喜欢这样,但仅作为警告列出。