我可以使用什么预定义的宏来检测叮当声?

我试图检测用于编译我的源代码的编译器。我可以很容易地找到预定义的宏来检查 MSVC 或 GCC (例如参见 https://github.com/cpredef/predef) ,但是我找不到任何宏来检查 clang。

有人知道 clang 是否定义了类似 __CLANG__的宏,以便了解当前编译我的代码的内容吗?

39527 次浏览

Found the answer using strings + grep :

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

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

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

You can do the same for gcc.

这个问题已经被回答了很多年,但是让我补充一下(为了将来的参考)在 窗户中是如何做到的:

echo | clang -dM -E -

same as for GCC:

echo | gcc -dM -E -

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