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

问题描述 投票:47回答:3

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

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

visual-c++ suppress-warnings brew-framework brewmp
3个回答
76
投票

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

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

#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 ) 

9
投票

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

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

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


4
投票

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

#pragma warning(push, 0)
#include "mywarningheader.h"
#pragma warning(pop)
© www.soinside.com 2019 - 2024. All rights reserved.