c - 相同的代码......但警告!有什么想法吗?

标签 c callback arguments warnings

我对收到的警告消息有疑问。 对于这一行,使用 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/

相关文章:

javascript - 如何在完成之前获取异步函数的状态?

java - 我只想给出一个参数而不是全部 4 个

c - macOS 和 Linux 下 qsort() 结果存在无法解释的差异

c - 求一个平面上的 4 个点是否构成一个矩形?

java - 使用导向器跨 C++ 和 Java 的 SWIG 多态性中的内存泄漏

javascript - Javascript 回调的范围问题

python - 如何将字典作为位置参数而不是关键字参数传递

java - 创建用于管理和解析命令参数的参数处理程序

c - fopen 可以创建文件但不能在 C 中重新打开文件

c - 字符串引用的段错误