我正在开始一个新的BREW项目,我想用警告级别4(/ W4)进行编译,以保持应用程序代码的美观和干净。问题是BREW标头本身不能用/ W4完全编译。
在gcc中,您可以使用-I和-isystem区分应用程序和系统标头,然后默认情况下,gcc不报告系统标头中的任何编译警告。 Visual C ++中是否有等效的机制?
答案 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 年的。