在 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 *)’
该程序工作得很好,所以我唯一关心的是为什么它不喜欢我使用的方式那?
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;
}
and i have my declaration
int cmp (const int * value1,const int * value2);
and I'm calling qsort in my program like so
qsort(currentCases,round,sizeof(int),cmp);
when i compile it I get the following warning
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 *)’
The program works just fine so my only concern is why it doesn't like the way im using that?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
cmp 函数的原型必须是
您可以在 qsort 调用中对其进行强制转换(不推荐):
或者将 void 指针强制转换为 cmp 中的 int 指针(标准方法):
The
cmp
function's prototype must beYou can either cast it in the invocation of qsort (not recommended):
or casts the void-pointers to int-pointers in cmp (the standard approach):
根据手册页,
__compar_fn_t
定义为:typedef int(*) __compar_fn_t (const void *, const void *)
你的
cmp
指定int*
参数。它不喜欢这样,但仅被列为警告。According to the man page, a
__compar_fn_t
is defined as:typedef int(*) __compar_fn_t (const void *, const void *)
Your
cmp
specifiesint*
parameters. It doesn't like that, but is only listed as a warning.