1

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

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

使用

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

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

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

4

1 回答 1

3

您要查找的宏是__clang__.

请注意,常规 Clang(不仅是 Clang-CL)也定义了它,因此您要同时检查__clang__两者_MSC_VER

于 2021-05-19T08:26:12.253 回答