Clang CL 和 MSVC CL 的区别

Distinguish between Clang CL and MSVC CL

有 CLang-CL,它是 MSVC CL 的直接替代品。

有谁知道如何区分我的代码当前是由clang-cl还是msvc的cl编译的?不在命令行上传递任何额外定义的宏。

正在使用

#ifdef _MSC_VER
//.....
#endif

不起作用,两个编译器都定义了 _MSC_VER.

同样在 Linux 上的常规 CLang 中(也是 Windows),可以执行 clang -dM -E - < /dev/null 转储所有已定义的宏。但是据我所知,clang-cl 和 msvc-cl 都没有这样的选项来转储所有定义的宏,所以我不知道有什么方法可以让两个编译器找出定义的宏列表中的差异使用哪个宏来区分这些编译器。

您要查找的宏是__clang__

请注意,常规 Clang(不仅是 Clang-CL)也定义了它,因此您想同时检查 __clang___MSC_VER