繁体   English   中英

为什么 gcc -Wdiscarded-qualifiers 抱怨这段代码?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM