Обнаружить компилятор с помощью #ifdef

Я пытаюсь создать небольшой код, который работает на нескольких платформах и компиляторах. Я использую утверждения, большинство из которых можно отключить, но при компиляции с pgicpp PGI с использованием -mp для поддержки OpenMP он автоматически использует параметр --no_exceptions: везде в моем коде с оператором throw генерируется фатальная ошибка компилятора. («поддержка обработки исключений отключена»)

Есть ли макрос defined, который я могу протестировать, чтобы скрыть операторы throw в PGI? Обычно я работаю с gcc, в котором есть GCC_VERSION и тому подобное. Я не могу найти никакой документации с описанием этих макросов в PGI.


person Seth Johnson    schedule 05.08.2009    source источник
comment
clang stackoverflow.com/questions/2658461/ | ВК stackoverflow.com / questions / 15127522 /   -  person Ciro Santilli 新疆再教育营六四事件ۍ    schedule 22.06.2016


Ответы (3)


Взгляните на проект Предопределенные макросы компилятора C / C ++ на Sourceforge.

В компиляторе PGI есть макрос __PGI.

Также обратите внимание на заголовок libnuwen compiler.hh, чтобы найти достойный способ «нормализовать» макросы управления версиями компилятора.

person Michael Burr    schedule 05.08.2009
comment
Вторая ссылка мертва :( - person Jakob Riedle; 17.02.2018

Вы можете попробовать это, чтобы увидеть, какие макросы предопределены компилятором:

pgcc -dM

Может быть, это подскажет подходящий макрос, который вы сможете использовать.

person Ville Laurikari    schedule 05.08.2009
comment
Верно. Результат этого показан на pgroup.com/support/tprs_70.htm, и есть PGI (упомянутый выше) и __PGIC ​​, PGIC_MINOR и PGIC_PATCHLEVEL, которые определяют основные, второстепенные и уровни исправлений части версии компилятора номер. - person Brooks Moses; 05.08.2009
comment
И есть радость того, что синтаксический анализатор берет двойные подчеркивания и делает с ними забавные вещи. «PGI» имеет префикс с двойным подчеркиванием; остальные три имеют префикс и суффикс. - person Brooks Moses; 05.08.2009

Вы смотрели заголовки наддува? Предположим, они поддерживают PGI, они найдут способ его обнаружить. Вы могли бы это использовать. Я бы начал искать где-нибудь в boost/config.

person sbi    schedule 05.08.2009