我该使用哪个预定义宏来检测Clang?

120

我正在尝试检测编译我的源代码使用的编译器。我可以轻松地找到预定义的宏来检查MSVC或GCC(例如,请参见https://github.com/cpredef/predef),但我无法找到任何用于检查clang的宏。

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


9
http://predef.sourceforge.net/precomp.html#sec4 - Yktula
2
编译器宏的更新列表:http://sourceforge.net/p/predef/wiki/Compilers/ - chrisaycock
3个回答

134

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

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

你可以用同样的方法来对gcc进行操作。


93

使用 stringsgrep 找到了答案:

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

44

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

echo | clang -dM -E -

与GCC相同:

echo | gcc -dM -E -

请注意:最后的短横线-实际上非常重要!(否则两个编译器都会出现error: no input files)


8
Windows系统中等同于/dev/null的是NUL: - legalize
@legalize 哇!我不知道那个!太酷了;你在哪里找到的? - MD XF
4
自从DOS时代以来,它一直存在,只是大多数DOS / Windows用户从未需要它。 - legalize
这也是我在Linux中通常做的事情。键入“/dev/null”更费力。 - Peter Cordes

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接