还有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都没有这样的选项来转储所有已定义的宏,所以我不知道有什么方法可以查看这两个编译器的已定义宏列表的差异,从而找出使用哪个宏来区分这些编译器。
发布于 2021-05-19 16:26:12
您要查找的宏是__clang__。
注意,常规的Clang (不仅仅是Clang-CL)也定义了它,所以您需要同时检查__clang__和_MSC_VER。
https://stackoverflow.com/questions/67599384
复制相似问题