如何在Visual C ++中禁止外部标头中的警告

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在Visual C ++中禁止外部标头中的警告相关的知识,希望对你有一定的参考价值。

我正在开始一个新的BREW项目,我想编译警告级别4(/ W4)以保持应用程序代码的美观和干净。问题是BREW标头本身不能用/ W4干净地编译。

在gcc中,您可以使用-I和-isystem来区分应用程序和系统头,然后默认情况下gcc不报告系统头中的任何编译警告。 Visual C ++中是否有等效的机制?

答案

仅在您无法更改的标题块周围使用此方法,但需要包含此方法。

您可以选择性地暂时禁用所有警告:

#pragma warning(push, 0)        
//Some includes with unfixable warnings
#pragma warning(pop)

您可以选择传入警告号码来禁用,而不是0,所以类似于:

#pragma warning( push )
#pragma warning( disable : 4081)
#pragma warning( disable : 4706 )
// Some code
#pragma warning( pop ) 
另一答案

Visual C ++团队刚刚添加了对外部头文件中警告级别的支持。您可以在他们的博客文章中找到详细信息:Broken Warnings Theory

从本质上讲,它会自动执行此处建议手动执行的操作:在#include指令之前推送新的警告级别,然后立即弹出。还有其他标志用于指定外部标头的位置,标记用于将所有<>包括为外部,#pragma system_header以及Clang或GCC中不可用的功能(在撰写本文时)以查看模板实例化堆栈中外部标头中的警告模板在用户代码中实例化。

除了该帖子下的评论,你还可以在a reddit announcement for that post找到一些有用的讨论。

另一答案

我不相信Visual C ++可以让你与众不同。您可以使用围绕包含的#pragma warning伪造它:

#pragma warning(push, 0)
#include "mywarningheader.h"
#pragma warning(pop)

以上是关于如何在Visual C ++中禁止外部标头中的警告的主要内容,如果未能解决你的问题,请参考以下文章

(Visual Studio)如何从我的解决方案外部使用googletest libs和标头?

如何在 Visual Studio 2019 C++ 中创建非虚拟文件夹

如何在 Visual Studio 2015 for C 中禁用警告? [复制]

如何在Linux上使用Windows标头构建Visual C ++应用程序?

如何缩短 Visual Studio 中的链接过程

如何在不是Visual Studio c中的依赖项的构建中包含项目#