MSVC const正确性:虚假的C4090警告

问题描述 投票:0回答:1

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视为常量,但不是。

此错误显然是awfully old。您知道如何在不关闭C4090的情况下解决此问题吗?

c pointers visual-c++ const
1个回答
2
投票

您可以在调用它的行之前禁用此警告,然后在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 ) 
}
© www.soinside.com 2019 - 2024. All rights reserved.