Определить компилятор с помощью #ifdef - PullRequest
8 голосов
/ 05 августа 2009

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

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

Ответы [ 3 ]

12 голосов
/ 05 августа 2009

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

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

Кроме того, взгляните на заголовок compiler.hh в libnuwen, чтобы найти хороший способ "нормализовать" макросы версий компилятора.

4 голосов
/ 05 августа 2009

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

pgcc -dM

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

0 голосов
/ 05 августа 2009

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

...