Warning when using qsort in C

前端 未结 2 1649
无人共我
无人共我 2020-12-19 09:28

I wrote my comparison function

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


        
相关标签:
2条回答
  • 2020-12-19 10:00

    According to the man page, a __compar_fn_t is defined as: typedef int(*) __compar_fn_t (const void *, const void *)

    Your cmp specifies int* parameters. It doesn't like that, but is only listed as a warning.

    0 讨论(0)
  • 2020-12-19 10:14

    The cmp function's prototype must be

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

    You can either cast it in the invocation of qsort (not recommended):

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

    or casts the void-pointers to int-pointers in cmp (the standard approach):

    int cmp(const void* pa, const void* pb) {
       int a = *(const int*)pa;
       int b = *(const int*)pb;
       ...
    
    0 讨论(0)
提交回复
热议问题