在使用 /analyze 时,如何禁用来自 headers 的 MSVC 警告,该警告包含在引号而不是尖括号中?

How do I disable MSVC warnings from headers included with quotes instead of angle brackets when using /analyze?

我正在尝试将 /analyze 标志添加到 cl

我收到来自外部 headers I #include "..." 的警告,即使我正在使用 /analyze:external-/external:I ...

我做错了什么?

示例项目:

main.cpp

#include "external.h"
// #include <external.h>  <- hides external's warnings

int main() {
  int shadowed = 0;
  { float shadowed = 0; }

  return 0;
}

external.h

void something() {
  int external_shadowed = 0;
  { float external_shadowed = 0; }
}

我从 VS 开发人员提示中 运行 这个命令:

cl /EHsc /analyze /analyze:external- /I include /external:I external /external:W0 main.cpp

然后我继续从两个文件中收到警告。

似乎 MSVC 只认为 /external:I 目录实际上是外部目录,如果它们包含在 <> 而不是 "" 中。这在任何地方都没有记录,我认为这是编译器的错误。 Third-party 库不一定总是包含在 <> 中。

更多信息和未来可能的更新在这里:https://developercommunity.visualstudio.com/t/analyze:external--and-external:I-flags/1688240

我还没有测试过自己,但是 according to Hwi-sung Im [MSFT]<>"" 现在在 Visual Studio 2022 中表现相同 w.r.t /external:I 17.0.