我对收到的警告消息有疑问。 对于这一行,使用 qsort 库函数:
qsort(catalog, MAX ,sizeof catalog, struct_cmp_by_amount);
我收到这个警告:
warning: passing argument 4 of ‘qsort’ makes pointer from integer without a cast
编辑:
struct_cmp_by_amount 是程序上的以下函数。(--->) 目录是一个结构和 MAX 定义为 100
但是,对于另一个具有相同代码和完全相同的 struct_cmp_by_amount 函数的程序,我没有收到第 4 个参数的警告!
编辑:我还不得不说,在这两个程序中我都没有使用函数原型(prototype)!但是对于第二个程序,它与第一个程序相比工作正常。
qsort(structs, structs_len, sizeof(struct st_ex), struct_cmp_by_amount);
编辑:
st_ex 是一个结构体
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 的函数声明或函数原型(prototype),因此假定它是一个 int(根据 C 规则),并警告您它需要一个指针(函数)在该参数位置。
关于c - 相同的代码......但警告!有什么想法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2849524/