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

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

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

Ответ 1

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

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__

Ответ 2

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

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

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

Ответ 3

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

echo | clang -dM -E -

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

echo | gcc -dM -E -

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