如何使用Visual Studio 2017的最高警告级别(墙)与std标头不兼容?

时间:2017-08-08 22:50:51

标签: c++ visual-studio visual-studio-2017

但我希望将它用于"警告被视为错误" =是

编译器标志中似乎有很多有用的检查,但它与标准头不兼容。我想使用此编译器标志来检查我的代码,但不是std标头。有没有办法做到这一点?

或者只是禁用我没有编写的任何代码的警告?

编辑:

添加了visual studio中的设置图片以及我尝试构建时会发生什么的示例。只包括iostream!

Example when trying to compile a basic C++ program with these settings

1 个答案:

答案 0 :(得分:1)

您可以通过在每次收录前更改警告级别来禁用标题中的警告(或更改警告级别),请参阅此处:How to suppress warnings in external headers in Visual C++。然而,这并不是那么方便,因为每次包容都需要这样做。

但是,如果您使用precompiled headers(这可能实际上有利于编译速度),您可以将您关注的所有系统/ STL标头放入预编译的头文件中,并通过编译指示禁用它们就在那里。或者您需要为标准头文件创建包装器,您将禁用警告并包含包装器头文件。

正如所讨论的那样," / Wall"有时走得太远(例如,填充是很常见的事情,有时你甚至无法做任何事情),甚至使用" / W4" documentation提到它可能过于详细(但同时推荐它用于新项目,所以我通常使用" / W4 / WX"用于新项目)。然而一些" / Wall"警告仍然可能会发现微妙的错误(如在开关等情况下丢失的情况)。您也可以只启用some of the extra warnings selectively