Предупреждение при использовании qsort в C
Вопрос
Я написал свою функцию сравнения
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*
параметры.Ему это не нравится, но он указан только как предупреждение.
Не связан с StackOverflow