我已经开始了一个新项目并决定确保在启用/ Wall选项的情况下干净地构建它。唯一的问题是并非所有第三方库(如boost)在没有警告的情况下进行编译,所以我在共享头中使用了这个:
#pragma warning(push)
#pragma warning(disable:4820)
#pragma warning(disable:4619)
#pragma warning(disable:4668)
#pragma warning(disable:4625)
#pragma warning(disable:4626)
#pragma warning(disable:4571)
#pragma warning(disable:4347)
#pragma warning(disable:4640)
#pragma warning(disable:4365)
#pragma warning(disable:4710)
#pragma warning(disable:4820)
#pragma warning(disable:4350)
#pragma warning(disable:4686)
#pragma warning(disable:4711)
#pragma warning(disable:4548)
#include <boost/array.hpp>
#include <boost/assert.hpp>
#include <boost/assign.hpp>
#include <boost/bind.hpp>
#include <boost/lexical_cast.hpp>
#include <boost/filesystem.hpp>
#include <boost/foreach.hpp>
#include <boost/format.hpp>
#include <boost/function.hpp>
#include <boost/integer.hpp>
#include <boost/optional.hpp>
#include <boost/regex.hpp>
#include <boost/smart_ptr.hpp>
#include <boost/algorithm/string.hpp>
#include <boost/tuple/tuple.hpp>
#include <boost/utility.hpp>
#include <boost/variant.hpp>
#pragma warning(pop)
这很好用,但每次添加新的boost标头时,我都要将它们生成的警告添加到列表中。有没有办法说禁用这段代码的所有警告?
答案 0 :(得分:47)
您可以按下/弹出低级警告,如下所示:
#pragma warning(push, 0)
#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
// ...
#pragma warning(pop)
但请注意,无法禁用所有警告。例如,某些链接器警告无法关闭。
答案 1 :(得分:21)
#pragma warning(disable:4820)
#pragma warning(disable:4619)
#pragma warning(disable:4668)
少行......
#pragma warning (disable : 4820 4619 4668)
答案 2 :(得分:4)
之前我所做的是设置“W3”选项而不是“Wall”,然后在我自己的每个源.cpp文件中设置
#pragma warning(push, 4)
在所有“#include ...”行之后的顶部然后
#pragma warning(pop)
作为文件的最后一行。
通过这种方式,您可以在代码中获得第4级警告,在第3方代码中获得第3级警告,但您无法做任何事情。
答案 3 :(得分:0)
使用Assaf Lavie's answer中描述的技术,可以创建帮助程序宏:
#define DISABLE_ALL_WARNINGS_BEGIN \
__pragma(warning(push, 0))
#define DISABLE_ALL_WARNINGS_END \
__pragma(warning(pop))
可以按以下方式使用它们(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 not wrapped inside "DISABLE_ALL_WARNINGS" section
}
DISABLE_ALL_WARNINGS_END