【问题标题】:Distinguish between Clang CL and MSVC CL区分 Clang CL 和 MSVC CL
【发布时间】:2021-05-19 08:17:18
【问题描述】:

有 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 都没有这样的选项来转储所有定义的宏,所以我不知道有一种方法可以查看两个编译器定义的宏列表的差异以找出使用哪个宏来区分这些编译器。

【问题讨论】:

  • 澄清问题是关于 C 还是 C++。答案会因语言而大相径庭。
  • @Lundin 删除了 C 标签,对 C++ 解决方案更感兴趣。另外,如果你知道,你能告诉我如何用 C 解决我的任务吗?
  • __clang__ 呢?
  • 在 C 中有 #ifdef __STDC__ 我认为 MS 没有定义,因为它们不遵循标准 C。
  • @HolyBlackCat 谢谢! __clang__ 宏有效!您可以将其发布为答案以便我接受吗?

标签: c++ visual-c++ clang clang-cl


【解决方案1】:

您要查找的宏是__clang__

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-06-11
    • 1970-01-01
    • 2019-10-24
    • 1970-01-01
    • 1970-01-01
    • 2018-05-09
    • 2016-04-04
    相关资源
    最近更新 更多