Reputation: 5688
I'm using MSVC with a CMaked project. As a result, I've enabled many of the flags on MSVC which were enabled for gcc and clang. However, the /Wall warning level is giving me some pain; it warns me about all kinds of things in included headers, like stdio.h and boost headers. Is there a way to stop MSVC from warning me about things in headers? I like my warning levels, but I only want them enabled for me.
Upvotes: 11
Views: 4798
Reputation: 1859
For a long time MSVC lacked the functionality to properly deal with this situation unlike GCC/Clang.
Now there is a solution for this.
The /external compiler options are available starting in Visual Studio 2017 version 15.6. In versions of Visual Studio before Visual Studio 2019 version 16.10, the /external options require you also set the /experimental:external compiler option.
Essentially this is MSVC's version of -isystem
which has long been a feature of GCC
/ Clang
.
Still though. Given how new this feature is, library writers should still make sure their public facing header files compile as cleanly as possible on MSVC.
Many users may not be able to update their VS version, or won't be aware of this new functionality.
Links:
Original blog post: https://devblogs.microsoft.com/cppblog/customized-warning-levels-and-code-analysis-for-external-headers/
Official documentation: https://learn.microsoft.com/en-us/cpp/build/reference/external-external-headers-diagnostics?view=msvc-170
Upvotes: 0
Reputation: 3040
You can use a different warning level for headers "external" to your project :
/external:anglebrackets /external:W3
See /external (External headers diagnostics) for details.
Upvotes: 4
Reputation: 2375
You can disable specific warnings using the /wdXXXX
flag where XXXX
is the number of the warnings you wish to ignore. No need to modify the code.
Upvotes: 0
Reputation: 145429
Mark Tolonen has already point out /W4
.
If that still produces warnings, e.g. you're using an older MSVC version like 7.1, or you're using some 3rd party library that still produces warnings about perfectly good code, and you're aiming for clean compiles, then see my msvc silly-warning suppression header.
It's been through a few rounds of community review, in the comp.lang.c++ Usenet group, but it may/will need updating as Microsoft adds even more silly-warnings in new compiler versions… ;-)
Upvotes: -1
Reputation: 178115
/Wall
is very pedantic. /W4
is probably all you really need. To answer your question, you can disable specific warnings around your headers with:
#pragma warning(disable:xxxx)
#include <yourheader.h>
#pragma warning(default:xxxx)
Or change the warning level with:
#pragma warning(push,3)
#include <yourheader.h>
#pragma warning(pop)
See the MSDN documentation: http://msdn.microsoft.com/en-us/library/2c8f766e.aspx
Upvotes: 10