Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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 headers 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++?

like image 242
Bob Whiteman Avatar asked Mar 29 '10 23:03

Bob Whiteman


2 Answers

Only use this method around a block of headers that you cannot change, but that you need to include.

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

#pragma warning(push, 0)         //Some includes 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 )  
like image 121
Brian R. Bondy Avatar answered Oct 12 '22 04:10

Brian R. Bondy


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.

like image 45
solodon Avatar answered Oct 12 '22 03:10

solodon