clangを検出するためにどの事前定義マクロを使用できますか?


111

ソースコードのコンパイルに使用されたコンパイラを検出しようとしています。MSVCまたはGCCをチェックするための定義済みマクロを簡単に見つけることができますが(たとえば、http://predef.sourceforge.net/を参照)、clangをチェックするためのマクロを見つけることができません。

__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
参考までに、Windowsと同等のもの/dev/nullNUL:
合法化

@legalizeおっと!知らなかった!それはいいね; どこで見つけたの?
MD XF 2017年

4
それはDOSの時代から存在しており、ほとんどのDOS / Windowsユーザーはそれを必要としませんでした。
2017年

これは、私が通常Linuxでも行うことです。タイピング/dev/nullはもっと面倒です。
Peter Cordes 2017
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.