I\'ve started a new project and have decided to make sure it builds cleanly with the /Wall option enabled. The only problem is not all 3rd party libraries (like boost) compi
Using the technique described in the Assaf Lavie's answer it is possible to create helper macros:
#define DISABLE_ALL_WARNINGS_BEGIN \
__pragma(warning(push, 0))
#define DISABLE_ALL_WARNINGS_END \
__pragma(warning(pop))
They can be used in the following way (online demo):
DISABLE_ALL_WARNINGS_BEGIN
void foo(int a)
{
// this function should generate the following warning
// "warning C4100: 'a': unreferenced formal parameter"
// unless it is wrapped inside "DISABLE_ALL_WARNINGS" section
}
DISABLE_ALL_WARNINGS_END
What I've done before is set the "W3" option rather than "Wall" then in each of my own source .cpp files I put
#pragma warning(push, 4)
at the top AFTER all the "#include..." lines and then
#pragma warning(pop)
as the very last line of the file.
This way you get level 4 warnings in your code and level 3 in 3rd party code that you can't do anything about.
You can push/pop a low level of warning, like this:
#pragma warning(push, 0)
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
// ...
#pragma warning(pop)
But know that it's not possible to disable all warnings. For example, some linker warnings are impossible to turn off.
#pragma warning(disable:4820)
#pragma warning(disable:4619)
#pragma warning(disable:4668)
for less lines....
#pragma warning (disable : 4820 4619 4668)