2013-12-05 3 views
1

У меня следующая ситуация -Временно отключить предупреждения о конкретных версиях GCC

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

Если добавить что-то вроде

#pragma GCC diagnostic ignored "-Wunused-parameter" 
#include <bad_header.hpp> 
#pragma GCC diagnostic error "-Wunused-parameter" 

он решает проблему с новой GCC, но старшая не знаком с этим прагмой и выдает предупреждение (которое становится ошибкой).

Что я могу сделать?

  1. Остановить обработку предупреждения как ошибки
  2. Surround мой прагму с какой-то версии проверки макросов

Я не люблю оба решения, есть что-нибудь еще я могу сделать?

Update следующий ответ Sander De Dycker в

Моя система сборки не позволяет мне использовать -isystem флаг с GCC

+1

Вы также можете бросить ваши неиспользуемые параметры '(void)', чтобы отключить предупреждения. –

+0

... или не называть их в списке параметров. –

+1

@ FrédéricHamidi: Все в порядке, если вы не имеете дело с «файлами заголовков, которые я не могу изменить». (Лично я просто удалю это ограничение, но мы, вероятно, должны предположить, что есть настоящая причина не менять их). –

ответ

1

Решение, которое я собираюсь использовать сейчас (пока я не буду видеть лучше один), чтобы обернуть диагностические прагмами GCC с макросами, чтобы проверить версию GCC, что-то вроде

#if (defined __GNUC__) && (__GNUC__ > 3) 
    #pragma GCC diagnostic ignored "-Wunused-parameter" 
#endif 

    #include <bad_header.hpp> 

#if (defined __GNUC__) && (__GNUC__ > 3) 
    #pragma GCC diagnostic error "-Wunused-parameter" 
#endif 
5

Поскольку вы только хотите, чтобы подавить предупреждения от заголовков вы не контролируете, вы могут отмечать эти заголовки как системные заголовки, используя -isystem вместо -I, а gcc больше не будет генерировать предупреждения для них (how gcc treats system headers).

+0

Спасибо, я должен проверить, возможно ли это в нашей системе сборки. Я вернусь к вам. – Vadim

+0

К сожалению, наша система сборки не позволяет мне внести это изменение. Я обновлю свой вопрос. Спасибо за ваш ответ. – Vadim

+0

@Vadim: можете ли вы внести минимальную модификацию в эти файлы заголовков, поставив '#pragma GCC system_header' вверху? Это не функциональное изменение, поэтому строгое повторное тестирование не требуется. –

Смежные вопросы