Есть ли способ отключить все предупреждения с помощью прагмы? - PullRequest
35 голосов
/ 08 февраля 2009

Я запустил новый проект и решил убедиться, что он собирается правильно, с включенной опцией / 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)

Это работает достаточно хорошо, но каждый раз, когда я добавляю новые заголовки повышения, я должен добавлять любые предупреждения, которые они генерируют, в список. Есть ли способ сказать отключить все предупреждения для этого фрагмента кода?

Ответы [ 4 ]

47 голосов
/ 08 февраля 2009

Вы можете нажать / выдвинуть низкий уровень предупреждения, как это:

#pragma warning(push, 0)        

#include <boost/bind.hpp>
#include <boost/shared_ptr.hpp>
// ...

#pragma warning(pop)

Но знайте, что невозможно отключить все предупреждения. Например, некоторые предупреждения компоновщика невозможно отключить.

21 голосов
/ 08 марта 2009
#pragma warning(disable:4820)
#pragma warning(disable:4619)
#pragma warning(disable:4668)

для меньшего количества строк ....

#pragma warning (disable : 4820 4619 4668)
4 голосов
/ 15 февраля 2009

То, что я сделал раньше, это установил параметр «W3», а не «Стена», а затем в каждом из моих собственных исходных файлов .cpp, которые я поместил

#pragma warning(push, 4)

вверху ПОСЛЕ всех строк "#include ...", а затем

#pragma warning(pop)

как самая последняя строка файла.

Таким образом, вы получаете предупреждения уровня 4 в своем коде и уровень 3 в коде третьей стороны, с которым вы ничего не можете сделать.

0 голосов
/ 30 мая 2019

Используя технику, описанную в ответе Ассафа Лави , можно создавать вспомогательные макросы:

#define DISABLE_ALL_WARNINGS_BEGIN \
    __pragma(warning(push, 0))

#define DISABLE_ALL_WARNINGS_END \
    __pragma(warning(pop))

Их можно использовать следующим образом ( онлайн-демонстрация ):

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
...