繁体   English   中英

MSVC const 正确性:虚假 C4090 警告

[英]MSVC const correctness : spurious C4090 warning

MSVC 发出关于 const 正确性的警告C4090 ,而 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视为常量而不是常量。

这个错误显然是非常古老的 知道如何在不关闭C4090的情况下解决此问题吗?

您可以在调用它的行之前禁用此警告并在之后将其恢复https://godbolt.org/z/W-XR-Q

#include <string.h>

void dummy(void)
{
    int i[42];
    int *pi[42];
    const int *pci[42];

    memset(i, 0, sizeof i);
    memset(pi, 0, sizeof pi);

#pragma warning( push )
#pragma warning( disable : 4090)
    memset(pci, 0, sizeof pci); // NO warning C4090
#pragma warning( pop ) 
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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