我有个问题要提醒你。
对于此行,使用qsort library函数:
qsort(catalog, MAX ,sizeof catalog, struct_cmp_by_amount);
我收到这个警告:
警告:传递'qsort'的参数4
从不带
铸造
编辑:
struct_cmp_by_amount是程序上的以下函数。(-->)
catalog是一个结构
最大值定义为100
但是,对于另一个具有相同代码、具有相同的struct_cmp_by_amount函数的程序,对于第4个参数,我没有收到警告!
编辑:我也不得不说,在这两个程序中,我没有使用函数原型!但对于第二个程序,它与第一个程序相比工作正常。
qsort(structs, structs_len, sizeof(struct st_ex), struct_cmp_by_amount);
编辑:
圣埃克斯是一个结构
struct st_ex structs[]={./*elements*/..}
size_t structs_len = sizeof(structs) / sizeof(struct st_ex);
int struct_cmp_by_amount(const void *a, const void *b)
{
struct catalogue *ia = (struct catalogue *)a;
struct catalogue *ib = (struct catalogue *)b;
return (int)(100.f*ia->amount - 100.f*ib->amount);
}
我在想为什么会这样。你有什么想法吗?
最佳答案
问题是,在一种情况下,qsort()
调用可以看到struct_cmp_by_amount()
的声明,而在另一种情况下则不能。因为您没有使用函数原型,我猜在一种情况下,函数声明在qsort()
调用之前,在另一种情况下在之后。
此外,列出的第一个qsort()
调用可能会导致问题,因为catalog
是您传递的指针或数组,而sizeof catalog
是您提供的大小。如果这里的catalog
是一个数组,你是说它是由最大的东西组成的,和整个数组一样大,这意味着你将占用比你分配的内存多得多的内存,并且可能会导致无休止的错误。如果catalog
是指针,则表示它指向指针大小的项数组。两者似乎都不合理。使用sizeof *catalog
或sizeof catalog[0]
会更有意义。
此外,使用浮点数来表示美元金额容易出错;通常最好使用整数类型来表示美分数。不过,这是另一个问题。
关于c - 相同的代码…但是警告!有什么想法吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2849524/