我可以使用哪个预定义的宏来检测clang?


111

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

有人知道clang是否定义了一个宏__CLANG__,以便知道当前正在编译我的代码吗?



Answers:


120

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

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

您可以对gcc执行相同的操作。


79

使用strings+ 找到了答案grep

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

41

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

echo | clang -dM -E -

与GCC相同:

echo | gcc -dM -E -

请注意:最后一个破折号-实际上很重要!(否则,您将获得error: no input files两个编译器)


8
仅供参考,相当于Windows/dev/nullNUL:
合法化

@合法哇!我不知道!太酷了;你在哪里找到的?
MD XF

4
从DOS时代开始就已经存在,只有大多数DOS / Windows用户从不需要它。
合法化

这也是我通常在Linux中执行的操作。打字/dev/null是更多的工作。
彼得·科德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.