Определить компилятор с помощью #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,

Другие вопросы по тегам