Вопрос:

Используйте прагму, чтобы отключить предупреждение, если оно реализовано

c++ clang compiler-warnings

200 просмотра

1 ответ

113172 Репутация автора

Clang недавно внедрил раздражающее предупреждение. Если я отключу его с помощью #pragma clang diagnostic ignored, тогда более старые версии Clang будут выдавать предупреждение «неизвестная группа предупреждений».

Есть ли способ проверить, реализовано ли предупреждение?

Автор: Potatoswatter Источник Размещён: 23.03.2017 03:09

Ответы (1)


2 плюса

113172 Репутация автора

Решение

Последние версии Clang реализуют __has_warningмакрос проверки возможностей. Так как Clang эмулирует GCC (а не наоборот) только с одним пулом флагов предупреждений, разумно кодировать против GCC, используя самоанализ проверки функций:

#if __GNUC__ && defined( __has_warning )
#   if __has_warning( "-Wwhatever" )
#       define SUPPRESSING
#       pragma GCC diagnostic push
#       pragma GCC diagnostic ignored "-Wwhatever"
#   endif
#endif

// Code that trips warning

#ifdef SUPPRESSING
#   undef SUPPRESSING
#   pragma GCC diagnostic pop
#endif

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

#define SUPPRESS_WARNING "-Wwhatever"
#include "suppress_warning.h"

// Code that trips warning

#include "unsuppress_warning.h"

suppress_warning.hэто немного сложно, потому что __has_warningи #pragmaне принимают макросы в качестве аргументов. Итак, получите это от Github или этой демонстрации Wandbox .

Автор: Potatoswatter Размещён: 23.03.2017 03:09
Вопросы из категории :
32x32