Определить компилятор с помощью #ifdef
Я пытаюсь создать небольшой код, который работает на нескольких платформах и компиляторах. Я использую утверждения, большинство из которых можно отключить, но при компиляции с PGI pgicpp
с помощью -mp
для поддержки OpenMP, он автоматически использует --no_exceptions
опция: везде в моем коде с оператором throw генерируется фатальная ошибка компилятора. ("поддержка обработки исключений отключена")
Есть ли define
Макрос я могу проверить, чтобы скрыть throw
заявления по PGI? Я обычно работаю с GCC, который имеет GCC_VERSION
и тому подобное. Я не могу найти документацию с описанием этих макросов в PGI.
3 ответа
Взгляните на предопределенный проект макроса компилятора C/C++ в Sourceforge.
Компилятор PGI имеет __PGI
макро.
Кроме того, взгляните на заголовок libnuwen compiler.hh, чтобы найти хороший способ "нормализовать" макросы версий компилятора.
Вы можете попробовать это, чтобы увидеть, какие макросы предопределены компилятором:
pgcc -dM
Может быть, это покажет подходящий макрос, который вы можете использовать.
Вы смотрели на заголовки повышения? Предположим, что они поддерживают PGI, они найдут способ обнаружить его. Вы могли бы использовать это. Я бы начал искать где-то в boost/config
,