我正在开始一个新的 BREW 项目,我想使用警告级别 4 (/W4) 进行编译,以保持应用程序代码整洁。问题是 BREW 头文件本身不能用 /W4 干净地编译。
在 gcc 中,您可以使用 -I 和 -isystem 来区分应用程序头和系统头,然后默认情况下 gcc 不会在系统头中报告任何编译警告。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 中不可用的功能(在撰写本文时)可以在跨模板实例化堆栈时查看外部头文件中的警告模板是在用户代码中实例化的。
除了该帖子下的评论,您还可以在该帖子的 reddit 公告中找到一些有用的讨论。
我不相信 Visual C++ 可以让您区分。您可以通过在包含周围使用来伪造它#pragma warning
:
#pragma warning(push, 0)
#include "mywarningheader.h"
#pragma warning(pop)