Який заздалегідь заданий макрос я можу використовувати для виявлення кланг?


111

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

Хтось знає, чи clang визначає такий макрос __CLANG__, щоб знати, що зараз компілює мій код?



Відповіді:


120

Щоб отримати список усіх заздалегідь визначених макросів, які використовує компілятор, скористайтеся цим:

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

Ви можете зробити те ж саме для gcc.



41

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

echo | clang -dM -E -

те саме, що і для GCC:

echo | gcc -dM -E -

Зверніть увагу: останній тире -насправді важливий! (Інакше ви отримуєте error: no input filesобидва компілятори)


8
FYI, Windows еквівалент /dev/nullєNUL:
Лигалайз

@legalize Whoa! Я цього не знав! Це досить круто; де ти це знайшов?
MD XF

4
Він існує ще з часів DOS, просто більшість користувачів DOS / Windows ніколи не потребували цього.
легалізувати

Це те, що я зазвичай роблю і в Linux. Введення тексту /dev/null- це більше роботи.
Пітер Кордес
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.