【发布时间】:2020-06-08 10:17:42
【问题描述】:
MSVC 发出警告 C4090 关于 const 正确性,而 GCC 和 Clang 都接受它:Compiler Explorer。
void dummy(void)
{
int i[42];
int *pi[42];
int const *pci[42];
memset(i, 0, sizeof i);
memset(pi, 0, sizeof pi);
memset(pci, 0, sizeof pci); // warning C4090: 'function': different 'const' qualifiers
}
似乎 MSVC 将pci 视为常量,但实际上并非如此。
这个错误显然是awfully old。知道如何在不关闭 C4090 的情况下解决此问题吗?
【问题讨论】:
-
我会放弃
const,这对我来说似乎毫无用处。 -
显然 MSVC 很糟糕。它对
int const pci[42];给出了相同的警告。也许编译器无法区分整数数组和指针数组... -
@Lundin 误报很烦人,但我宁愿绕过编译器缺陷并被警告实际未定义的行为。
-
@diapir 相反,您应该停止使用无法修复 10 年前的错误的编译器。对于 PC 编译器,还有很多其他选择。
-
将
pci转换为void*应该抑制警告 -memset((void*)pci, 0, sizeof pci);
标签: c pointers visual-c++ constants