Я продолжаю получать это предупреждение от сторонней библиотеки (которую я не хочу отлаживать), поэтому я был бы очень признателен за способ подавить это конкретное предупреждение. Google подвел меня, так что я здесь.
Как подавить перечисляемый и неперечисляемый тип в предупреждении условного выражения в GCC
Ответы (4)
В 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
, чтобы узнать, какой параметр управляет конкретным предупреждением.
Конечно, гораздо предпочтительнее устранить основную причину всех предупреждений, чем подавлять их! Однако иногда это невозможно.
Что ж, поскольку я не смог найти способ отключить это конкретное предупреждение, я прибегнул к использованию 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), но я не проверял это.
#pragma GCC system_header
спасло меня от кучи бессмысленных предупреждений.
- person ; 11.12.2014
Разве следующий флаг не избавит от этого предупреждения?
-Wno-enum-promotion