当 Visual Studio 2017 与 std 标头不兼容时,如何使用最高警告级别(墙)?
Posted
技术标签:
【中文标题】当 Visual Studio 2017 与 std 标头不兼容时,如何使用最高警告级别(墙)?【英文标题】:How to use The highest Warning Level (Wall) for Visual Studio 2017 when it's incompatible for the std headers? 【发布时间】:2017-08-08 22:50:50 【问题描述】:但我想将它与“警告视为错误”一起使用 = 是
编译器标志中似乎有很多有用的检查,但它与标准头文件不兼容。我想使用这个编译器标志来检查我的代码,而不是 std 头文件。有没有办法做到这一点?
或者只是禁用我没有编写的任何代码的警告?
编辑:
添加了 Visual Studio 中的设置图片以及我尝试构建时发生的情况的示例。只包含 iostream!
Example when trying to compile a basic C++ program with these settings
【问题讨论】:
我认为不是。但是IMO的错误警告太过分了。如果你不忽略它们就足够了 “它与标准头文件不兼容”——在什么意义上?举个例子。 我添加了一张图片来显示当您包含您可以通过在每次包含之前更改警告级别来禁用标题中的警告(或更改警告级别),请参见此处:How to suppress warnings in external headers in Visual C++。然而,这不是那么方便,因为需要为每个包含都完成它。
但是,如果您使用precompiled headers(这实际上可能对编译速度有好处),您可以将您关心的所有系统/STL 头文件放入预编译的头文件中,然后通过编译指示禁用它们。或者您需要为标准标头创建包装器,您将在其中禁用警告并包含包装器标头。
正如所讨论的,“/Wall”有时会走得太远(例如,填充是很常见的事情,您有时甚至无法做任何事情),即使使用“/W4”,documentation 也会提到它可能太详细了(不过同时推荐给新项目,所以我一般在新项目中使用“/W4 /WX”)。然而,一些“/Wall”警告仍然可能会发现一些细微的错误(比如 switch 中缺少大小写等)。您不妨只启用some of the extra warnings selectively。
【讨论】:
以上是关于当 Visual Studio 2017 与 std 标头不兼容时,如何使用最高警告级别(墙)?的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio 2015 中打开 Visual Studio 2017 项目
visual studio2017怎么使用strcat,strcpy,strlwr,strupr