Предупреждение при использовании qsort в C

StackOverflow https://stackoverflow.com/questions/2561697

  •  23-09-2019
  •  | 
  •  

Вопрос

Я написал свою функцию сравнения

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 к указателям int в cmp (стандартный подход):

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

Другие советы

Согласно man-странице, __compar_fn_t определяется как: typedef int(*) __compar_fn_t (const void *, const void *)

Твой cmp указывает int* параметры.Ему это не нравится, но он указан только как предупреждение.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top