FIL*_*IaS 0 c warnings arguments callback
我有一个问题是我得到的警告信息.对于这一行,使用qsort库函数:
qsort(catalog, MAX ,sizeof catalog, struct_cmp_by_amount);
Run Code Online (Sandbox Code Playgroud)
我收到这个警告:
警告:传递'qsort'的参数4使得指针来自整数而没有强制转换
编辑:
struct_cmp_by_amount是程序中的以下函数.(--->)catalog是一个struct,MAX定义为100
但是,对于具有相同代码的另一个程序,具有完全相同的struct_cmp_by_amount函数,我不会得到第4个参数的警告!
编辑:我也必须说,在这两个程序我没有使用功能的原型!但对于第二个程序,它通常与第一个程序相反.
qsort(structs, structs_len, sizeof(struct st_ex), struct_cmp_by_amount);
Run Code Online (Sandbox Code Playgroud)
编辑:
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);
}
Run Code Online (Sandbox Code Playgroud)
我在徘徊为什么会发生这种情况.你有什么想法吗?
我猜,因为我看不到你的代码.
qsort()接受对数组进行排序,条目数,条目大小以及指向比较例程的指针,该例程采用两个指向条目的指针并进行比较.(我不记得函数的返回类型或约定.)
看起来好像编译器无法看到比较例程的函数声明或函数原型,因此struct_cmp_by_amount假定它是一个int(根据C规则),并警告你它需要一个指针(对于一个function)在那个参数位置.