Какой предопределенный макрос можно использовать для обнаружения лязга? - PullRequest
107 голосов
/ 17 апреля 2010

Я пытаюсь определить компилятор, использованный для компиляции моего исходного кода. Я могу легко найти предопределенные макросы для проверки на MSVC или GCC (см., Например, http://predef.sourceforge.net/), но не могу найти макрос для проверки на clang.

Кто-нибудь знает, определяет ли clang макрос типа __CLANG__, чтобы знать, что в данный момент компилирует мой код?

Ответы [ 3 ]

113 голосов
/ 29 апреля 2011

Чтобы получить список всех предопределенных макросов, которые использует компилятор, используйте это:

clang -dM -E -x c /dev/null

Вы можете сделать то же самое для gcc.

75 голосов
/ 17 апреля 2010

Нашел ответ, используя strings + grep:

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__
37 голосов
/ 27 июля 2012

На этот вопрос отвечали годами, но позвольте мне добавить (для дальнейшего использования), как это делается в Windows :

echo | clang -dM -E -

То же, что и для GCC:

echo | gcc -dM -E -

Обратите внимание: последний штрих - действительно важен! (В противном случае вы получите error: no input files для обоих компиляторов)

...