Я вполне уверен, что нет никакого способа сделать это.
И у GCC, и у Clang есть внутренние интерфейсы, которые позволяют интерфейсу языка регистрировать обработчики #pragma
с препроцессором - см. GCClibcpp/directives.c
и Clang's lib/Lex/Pragma.cpp
- но, насколько я вижу, нет ничего, что позволяло бы вам изменять, какие обработчики зарегистрированы (кроме того, что подразумевается для языкового варианта, для которого вы компилируете), на основе параметров командной строки.
Я знаю, как отключить все неизвестные предупреждения #pragma.Ответ был дан, например, здесь: SO: Как отключить предупреждения #pragma?
Обратите внимание, что ответ с наибольшим количеством голосов лучше, чем принятый там ответ.-Wno-unknown-pragmas
можно просто добавить в командную строку после всего (например, -Wall
), которое включает предупреждение.
Мой источник анализируется двумя компиляторами.В одном из них есть специальный #pragma
, который неизвестен другому.Конечно, я мог бы, вероятно, поставить #ifdef COMPILER_IDENTIFICATION_MACRO ... #endif
вокруг каждого экземпляра #pragma
, но это было бы громоздко.
С более философской точки зрения, я думаю, что это действительно правильное решение, хотя и громоздкоеэто может быть!
Мне кажется правильным скрыть любые #pragma
от компилятора, который, как ожидается, не поймет его так, как вы намереваетесь, учитывая, что весь смысл #pragma
заключается в предоставлениимеханизм для вызова поведения, определенного реализацией, в компиляторе.
(Если вы в конечном итоге сделаете это, обратите внимание, что Clang определяет __clang__
, но и GCC и Clang определяют __GNUC__
.)