![](/img/trans.png)
[英]why does GCC give me this `-Wdiscarded-qualifiers` warning?
[英]Why does gcc -Wdiscarded-qualifiers complain about this code?
我正在为这种情况编写一个qsort
比较函数回调:
int matrix[3][4] =
{
{1,2,3,4},
{5,6,7,8},
{9,1,2,3},
};
qsort(matrix, 3, sizeof(int[4]), compare);
由于项目类型是int[4]
那么qsort
应该将转换为const void*
的int(*)[4]
指针传递给我。
所以我写了这样的函数:
int compare (const void* obj1, const void* obj2)
{
const int (*ptr1)[4] = obj1;
const int (*ptr2)[4] = obj2;
/* ... */
return 0;
}
gcc 12.2 x86 -Wall -Wextra -std=c17 -pedantic-errors
抱怨const int (*ptr1)[4] = obj1;
线路:
错误:初始化从指针目标类型 [-Wdiscarded-qualifiers] 中丢弃“const”限定符
为什么我会收到此警告? 据我所知,没有const
限定符被丢弃。 该类型是指向 4 const int
数组的指针。 显然这个警告也可以追溯到旧的 gcc 版本。
而具有相同选项的 clang 和 icx 可以干净地编译相同的代码,并且最终结果在所有 3 个编译器上都能正常工作。
因为通过传递-pedantic-errors
您请求的是迂腐的诊断,而且,迂腐地, const int[4]
不是 const 限定类型(它是 const 元素的数组,数组本身不能限定)。 请参见GCC 错误 62198 。
gcc-5.1 和更新版本不会在非迂腐模式下发出此警告。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.