【发布时间】:2018-07-02 22:00:26
【问题描述】:
我记得这个技巧在过去一段时间有效,但现在似乎不起作用。
将#pragma warning(push, 0) 放在#include 语句周围实际上并不能防止从这些包含的文件中生成/Wall 警告。
将/Wall 更改为/W4 解决了这个问题,但使用/Wall 似乎被破坏了。
#pragma warning(push, 0)
#include <iostream>
#pragma warning(pop)
int main() {
std::cout << "Hello, World!";
}
构建输出:
Microsoft Visual Studio Community 2017 版本 15.5.3
完整的命令行开关(从 cmake 生成):
/GS /TP /analyze- /Wall /Zc:wchar_t /Gm- /O2 /Ob2 /Fd"main.dir\Release\vc141.pdb" /Zc:inline /fp:precise /D "WIN32" /D "_WINDOWS" /D "NDEBUG" /D "CMAKE_INTDIR=\"Release\"" /D "_MBCS" /errorReport:prompt /WX /Zc:forScope /GR /Gd /Oy- /MD /std:c++14 /Fa"Release/" /EHsc /nologo /Fo"main.dir\Release\" /Fp"main.dir\Release\main.pch" /diagnostics:classic
我在 Google 上四处搜索,发现 post 似乎描述了相同的问题,但没有提出解决方案。希望 StackOverflow 上的人们有更好的主意?
【问题讨论】:
-
你必须以正确的方式举报,MSDN 论坛支持人员不会转发。在 VS 中使用帮助 > 发送反馈 > 报告问题。同时,考虑到 /W4 是唯一真正实用的设置,/Wall 太健谈而无用。如果你禁用一切来解决这个问题,那么它就没有意义了。并且 0 没有记录为正确的值,只有 1..4。所以头文件的#pragma warning(push, 4) 是一个合乎逻辑的选择。
-
"认为 /W4 是唯一真正实用的设置," 这实际上不是真的,我们在具有数百万行的代码库上使用 Wall(带有一些选择抑制),这并不少见在我的行业。这里有一篇很棒的文章,介绍了 MS 正在做些什么来让 Wall blogs.msdn.microsoft.com/vcblog/2017/12/13/… 更容易运行@
标签: c++ visual-studio msbuild visual-studio-2017