Я знаю, что вопрос о GCC, но для людей, желающих сделать это как можно более мобильно:
Большинство компиляторов, которые могут выдавать это предупреждение, имеют способ отключить предупреждение из командной строки (исключение: PGI) или из кода (исключение: DMC):
- GCC:
-Wno-unknown-pragmas
/ #pragma GCC diagnostic ignored "-Wunknown-pragmas"
- лязг:
-Wno-unknown-pragmas
/ #pragma clang diagnostic ignored "-Wunknown-pragmas"
- Компилятор Intel C / C ++:
-diag-disable 161
/ #pragma warning(disable:161)
- PGI:
#pragma diag_suppress 1675
- MSVC:
-wd4068
/ #pragma warning(disable:4068)
- TI:
--diag_suppress,-pds=163
/ #pragma diag_suppress 163
- IAR C / C ++ Компилятор:
--diag_suppress Pe161
/ #pragma diag_suppress=Pe161
- Компилятор Digital Mars C / C ++:
-w17
Вы можете объединить большую часть этого в один макрос для использования в вашем коде, что я и сделал для макроса HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
в Хедли :
#if HEDLEY_HAS_WARNING("-Wunknown-pragmas")
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("clang diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_INTEL_VERSION_CHECK(16,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("warning(disable:161)")
#elif HEDLEY_PGI_VERSION_CHECK(17,10,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 1675")
#elif HEDLEY_GNUC_VERSION_CHECK(4,3,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("GCC diagnostic ignored \"-Wunknown-pragmas\"")
#elif HEDLEY_MSVC_VERSION_CHECK(15,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS __pragma(warning(disable:4068))
#elif HEDLEY_TI_VERSION_CHECK(8,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress 163")
#elif HEDLEY_IAR_VERSION_CHECK(8,0,0)
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS _Pragma("diag_suppress=Pe161")
#else
# define HEDLEY_DIAGNOSTIC_DISABLE_UNKNOWN_PRAGMAS
#endif
Обратите внимание, что Хедли может иметь более полную информацию, чем этот ответ, так как я, вероятно, забуду обновить этот ответ, поэтому, если вы не хотите просто использовать Хедли (это единственный общедоступный заголовок C / C ++, который вы можете легко удалить в свой проект) вы можете использовать Хедли в качестве руководства вместо информации выше.
Проверка версий, вероятно, чрезмерно пессимистична, но иногда трудно получить хорошую информацию об устаревших версиях проприетарных компиляторов, и я бы предпочел быть в безопасности, чем сожалеть. Опять же, информация Хедли может быть лучше.
Многие компиляторы также могут помещать / выводить предупреждения в стек, так что вы можете помещать, затем отключать их, прежде чем включать код, который вы не контролируете, а затем выдавать, чтобы ваш код все равно вызывал соответствующее предупреждение. (так что вы можете очистить его). В Хедли тоже есть макросы: HEDLEY_DIAGNOSTIC_PUSH
/ HEDLEY_DIAGNOSTIC_POP
.