在 MSVC 中启用 Wsign-compare

Enable Wsign-compare in MSVC

我希望在 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 具有攻击性

有一个(显然)未记录的警告 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;
}