Как подавить предупреждение «перечислимый и не перечислимый тип в условном выражении» в GCC - PullRequest
5 голосов
/ 19 июня 2009

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

Ответы [ 4 ]

1 голос
/ 16 сентября 2014

В 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, чтобы узнать, какая опция управляет конкретным предупреждением.

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

1 голос
/ 23 декабря 2011

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

См. Также

0 голосов
/ 20 июня 2009

Ну, так как я не смог найти способ отключить это конкретное предупреждение, я прибег к использованию gp's #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), но я не проверял это.

0 голосов
/ 19 июня 2009

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

-Wno-enum-promotion
...