我可以用什么预定义的宏来检测clang?

时间:2010-04-17 13:12:57

标签: c macros clang c-preprocessor

我正在尝试检测用于编译源代码的编译器。我可以很容易地找到预定义的宏来检查MSVC或GCC(例如,参见http://predef.sourceforge.net/),但我找不到任何宏来检查clang。

有人知道clang是否定义了像__CLANG__这样的宏,以便知道当前正在编译我的代码的是什么?

3 个答案:

答案 0 :(得分:112)

要获取编译器使用的所有预定义宏的列表,请使用:

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

你可以为gcc做同样的事。

答案 1 :(得分:74)

使用strings + grep找到答案:

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

答案 2 :(得分:37)

这个问题已经回答了多年,但是让我在 Windows 中添加(以供将来参考)它是如何完成的:

echo | clang -dM -E -
与GCC相同:

echo | gcc -dM -E -

请注意:最后一个短划线-实际上非常重要! (否则,两个编译器都会获得error: no input files