【问题标题】:Enable Wsign-compare in MSVC在 MSVC 中启用 Wsign-compare
【发布时间】:2020-08-15 18:45:20
【问题描述】:

我想在 msvc 中收到类似于 -Wsign-compare 的警告。例如。它应该触发:

bool foo(){
  int i = -1;
  size_t j = 1;
  return i == j;
}

有 C4389,但只有在 junsigned 时才会触发,我不太明白:https://godbolt.org/z/Yd5z1P IMO 它应该针对上述情况触发。

是否还有其他适用于上述情况但在其他情况下很少的警告?例如https://docs.microsoft.com/de-de/cpp/error-messages/compiler-warnings/compiler-warning-level-4-c4365?view=vs-2019 具有攻击性

【问题讨论】:

    标签: visual-c++ warnings unsigned signed


    【解决方案1】:

    您的代码将显示一个(显然)未记录的警告 C4388,它与the documented C4389 非常相似。

    使用/W4 开关编译的以下代码会生成这两个警告中的每一个:

    #pragma warning(default:4388)
    #pragma warning(default:4389)
    bool foo()
    {
        int i = -1;
        unsigned j = 1;
        size_t k = 1;
        bool a = i == j; // warning C4389: '==': signed/unsigned mismatch
        bool b = i == k; // warning C4388: '==': signed/unsigned mismatch
        return 1;
    }
    

    【讨论】:

    • 是的,这行得通,谢谢!然而 C4389 是另一个警告(虽然非常相似),当junsigned 时触发。 C4388 似乎没有记录。我假设他们首先使用了 C4388,但将其替换为不那么激进的 C4389,但谁知道...
    • 我看到C4388 现在记录在案...
    猜你喜欢
    • 2013-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-15
    • 2021-01-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多