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


111

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

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



Ответы:


121

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

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

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



41

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

echo | clang -dM -E -

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

echo | gcc -dM -E -

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


8
К вашему сведению, Windows эквивалент /dev/nullisNUL:
legalize

@legalize Ого! Я этого не знал! Это круто; где ты это нашел?
MD XF

4
Он существует со времен DOS, просто большинству пользователей DOS / Windows он никогда не нужен.
легализовать

Это то, что я обычно делаю в Linux. Печатать /dev/null- это больше работать.
Питер Кордес
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.