在C中使用qsort时出现警告

时间:2010-04-01 15:49:37

标签: 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 *)’

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

2 个答案:

答案 0 :(得分:19)

cmp函数的原型必须是

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

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

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

或将void-pointers转换为cmp中的int-pointers(标准方法):

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

答案 1 :(得分:0)

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

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