在使用 /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.
我正在尝试将 /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.