Mit welchem ​​vordefinierten Makro kann ich Klirren erkennen?


111

Ich versuche, den Compiler zu erkennen, der zum Kompilieren meines Quellcodes verwendet wird. Ich kann leicht vordefinierte Makros finden, um nach MSVC oder GCC zu suchen (siehe zum Beispiel http://predef.sourceforge.net/ ), aber ich kann kein Makro finden, um nach Klirren zu suchen.

Weiß jemand, ob clang ein Makro wie definiert, __CLANG__um zu wissen, was gerade meinen Code kompiliert?



Antworten:


120

Verwenden Sie Folgendes, um eine Liste aller vordefinierten Makros zu erhalten, die der Compiler verwendet:

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

Sie können das gleiche für gcc tun.


79

Die Antwort mit strings+ gefunden grep:

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

41

Diese Frage wurde jahrelang beantwortet, aber lassen Sie mich (als zukünftige Referenz) hinzufügen, wie es in Windows gemacht wird :

echo | clang -dM -E -

wie bei GCC:

echo | gcc -dM -E -

Bitte beachten Sie: Der letzte Strich -ist eigentlich wichtig! (Ansonsten bekommst du error: no input filesfür beide Compiler)


8
Zu Ihrer Information, Windows-Äquivalent von /dev/nullisNUL:
legalisiere den

@legalize Whoa! Das wusste ich nicht! Das ist ziemlich toll; wo hast du das gefunden
MD XF

4
Es ist seit den DOS-Tagen da, nur die meisten DOS / Windows-Benutzer haben es nie gebraucht.
Legalisieren Sie den

Das mache ich normalerweise auch unter Linux. Tippen /dev/nullist mehr Arbeit.
Peter Cordes
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.