【发布时间】:2011-02-09 03:35:59
【问题描述】:
我正在尝试检测用于编译我的源代码的编译器。我可以轻松找到预定义的宏来检查 MSVC 或 GCC(例如,参见 http://predef.sourceforge.net/),但我找不到任何宏来检查 clang。
有人知道 clang 是否定义了像 __CLANG__ 这样的宏来了解当前正在编译我的代码的内容吗?
【问题讨论】:
标签: c macros clang c-preprocessor
我正在尝试检测用于编译我的源代码的编译器。我可以轻松找到预定义的宏来检查 MSVC 或 GCC(例如,参见 http://predef.sourceforge.net/),但我找不到任何宏来检查 clang。
有人知道 clang 是否定义了像 __CLANG__ 这样的宏来了解当前正在编译我的代码的内容吗?
【问题讨论】:
标签: c macros clang c-preprocessor
要获取编译器使用的所有预定义宏的列表,请使用以下命令:
clang -dM -E -x c /dev/null
你可以对 gcc 做同样的事情。
【讨论】:
使用strings + grep 找到答案:
$ strings /usr/bin/clang | grep __ | grep -i clang
__clang__
【讨论】:
这个问题已经回答了多年,但让我补充一下(供将来参考)它是如何在 Windows 中完成的:
echo | clang -dM -E -
与 GCC 相同:
echo | gcc -dM -E -
请注意:最后一个破折号- 实际上很重要! (否则两个编译器都会得到error: no input files)
【讨论】:
/dev/null 是 NUL:
/dev/null 需要更多的工作。