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

时间:2010-03-29 23:43:11

标签: visual-c++ suppress-warnings brew-framework brewmp

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

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

4 个答案:

答案 0 :(得分: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 ) 

答案 1 :(得分:9)

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

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

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

答案 2 :(得分:4)

我不相信Visual C ++会让您与众不同。你可以在include:

周围使用#pragma warning伪造它
#pragma warning(push, 0)
#include "mywarningheader.h"
#pragma warning(pop)

答案 3 :(得分:2)

这个问题似乎有答案。

this post 谈到了 incorrect_df <- tribble( ~name, ~employment, ~employment_id, "Markisha", "{'url': 'https://api.zenefits.com/core/people/123/employments', 'object': '/meta/ref/list', 'ref_object': '/core/employments'}", "people/123/employments", "Rickisha", "{'url': 'https://api.zenefits.com/core/people/1234/employments', 'object': '/meta/ref/list', 'ref_object': '/core/employments'}", "people/1234/employments" ) ,它可用于包含带有一组特殊警告的标头。

我自己没有测试过,但博文是 2017 年的。