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

Pie*_*don 107 c macros clang c-preprocessor

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

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

Chr*_*ter 117

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

clang -dM -E -x c /dev/null
Run Code Online (Sandbox Code Playgroud)

你可以为gcc做同样的事情.


Pie*_*don 76

使用strings+ 找到答案grep:

$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__
Run Code Online (Sandbox Code Playgroud)


Ber*_*ann 39

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

echo | clang -dM -E -
Run Code Online (Sandbox Code Playgroud)

与海湾合作委员会相同:

echo | gcc -dM -E -
Run Code Online (Sandbox Code Playgroud)

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

  • 仅供参考,Windows等效于`/ dev/null`是`NUL:` (5认同)
  • 从DOS时代开始就已经存在,只有大多数DOS / Windows用户从不需要它。 (2认同)