开发者

How to suppress warnings in external headers in Visual C++

I'm starting a new BREW project, and I'd like to compile with Warning Level 4 (/W4) to keep the application code nice and clean. The problem is that the BREW headers themselves don't compile cleanly with /W4.

In gcc you can differentiate between application and system head开发者_开发技巧ers by using -I and -isystem, and then by default gcc doesn't report any compilation warnings in system headers. Is there an equivalent mechanism in Visual C++?


Use this method around (a) header(s) that you cannot or don't want to change, but which you need to include.

You can selectively, and temporarily disable all warnings like this:

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

Instead of 0 you can optionally pass in the warning number to disable, so something like:

#pragma warning(push)
#pragma warning(disable : 4081)
#pragma warning(disable : 4706)
// Some code
#pragma warning(pop)


Visual C++ team has just added support for warning levels in external headers. You can find the details in their blog post: Broken Warnings Theory.

In essence it does automatically what the suggestions here were recommending to do manually: pushes new warning level right before #include directive and pops it up right after. There are additional flags to specify locations of external headers, flag to treat all <> includes as external, #pragma system_header and a feature not available in Clang or GCC (as of this writing) to see warnings in external headers across template instantiation stack when the template was instantiated in the user code.

Besides the comments under that post, you can also find some useful discussion in a reddit announcement for that post.


I don't believe Visual C++ lets you differentiate. You can fake it by using #pragma warning around the include:

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


It seems like there is an answer to this.

this post talks about /external:I that can be used to include headers with a special set of warnings.

I have not tested it myself, but the blog post is from 2017.


The /external:anglebrackets /external:W0 compiler flags disable warnings on the headers imported with #include <...>.

You can change the W0 to W1, W2, W3, or W4, to set a different warning level for those.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜