Как подавить перечисляемый и неперечисляемый тип в предупреждении условного выражения в GCC

Я продолжаю получать это предупреждение от сторонней библиотеки (которую я не хочу отлаживать), поэтому я был бы очень признателен за способ подавить это конкретное предупреждение. Google подвел меня, так что я здесь.


person Community    schedule 19.06.2009    source источник


Ответы (4)


-Wno-enum-compare обходит это предупреждение.

См. также

person Brian Cain    schedule 22.12.2011

В gcc4.6 и более поздних версиях вы можете использовать прагмы для подавления определенных предупреждений и делать это подавление только для определенного блока кода, т.е.:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wno-enum-compare" 
// Code that causes warning goes here
#pragma GCC diagnostic pop

Push/pop используются для сохранения диагностических опций, которые были на месте до того, как ваш код был обработан.

Это был бы гораздо лучший подход, чем использование #pragma GCC system_header для подавления всех предупреждений. (Конечно, в старых версиях gcc вы можете «застрять» с подходом #pragma GCC system_header!)

Вот хороший справочник по подавлению предупреждений gcc: http://www.dbp-consulting.com/tutorials/SuppressingGCCWarnings.html

На этой странице также описывается, как использовать -fdiagnostics-show-option, чтобы узнать, какой параметр управляет конкретным предупреждением.

Конечно, гораздо предпочтительнее устранить основную причину всех предупреждений, чем подавлять их! Однако иногда это невозможно.

person fahrradler    schedule 16.09.2014

Что ж, поскольку я не смог найти способ отключить это конкретное предупреждение, я прибегнул к использованию gcc #pragma system_header. По сути, я обернул проблемный заголовок следующим образом:

#if defined __GNUC__
#pragma GCC system_header
#elif defined __SUNPRO_CC
#pragma disable_warn
#elif defined _MSC_VER
#pragma warning(push, 1)
#endif

#include "foo.h"

#if defined __SUNPRO_CC
#pragma enable_warn
#elif defined _MSC_VER
#pragma warning(pop)
#endif

где foo.h был проблемным заголовком. Теперь я просто включаю этот fooWrapper.h, и проблема исчезает. Обратите внимание, что это должно работать и для некоторых других компиляторов (MSC и SUNPRO), но я не проверял это.

person Community    schedule 20.06.2009
comment
Спасибо, это #pragma GCC system_header спасло меня от кучи бессмысленных предупреждений. - person ; 11.12.2014

Разве следующий флаг не избавит от этого предупреждения?

-Wno-enum-promotion
person Rob Wells    schedule 19.06.2009
comment
Неа. На самом деле, gcc даже не распознает эту опцию. Откуда вы узнали об этой опции? Его нет в списке gcc.gnu.org/onlinedocs/gcc/Warning-Options. html - person ; 20.06.2009