用于检查我是否正在运行 MSVC 或 Intel 编译器的宏

问题描述 投票:0回答:1

所以我使用最新的 Visual Studio 2022 并安装了 Intel C++ 编译器。

当我只是编写一个简单的 main() 来打印宏 MSC_VER 和 __INTEL_LLVM_COMPILER 的值时,

我明白了 MSC_VER = 1937 和 __INTEL_LLVM_COMPILER=20230200.

怎么可能两者都定义了值?我肯定使用了错误的宏,那么要检查的正确宏是什么?

c++ visual-c++ llvm icx icpx
1个回答
0
投票

旨在与 MSVC 兼容的编译器通常会定义

_MSC_VER
。类似于支持 C GNU 方言的编译器将
__GNUC__
定义为版本号:如何告诉 Clang 停止冒充其他编译器?

真正的MSVC肯定不会定义

__INTEL_LLVM_COMPILER
__llvm__
,所以

#if defined(_MSC_VER) && !defined(__llvm__) && !defined(__INTEL_COMPILER)
  // real MSVC, or a different non-LLVM-based compiler emulating it.
#else
...
#endif

检查

__llvm__
应该可以很好地排除主线 Clang 和
clang-cl
以及英特尔基于 LLVM 的 ICX / ICPX 和/或 OneAPI 内容。

__INTEL_COMPILER
由英特尔的“经典”(非 LLVM)编译器 ICC (C) 和 ICPC (C++) 定义。

© www.soinside.com 2019 - 2024. All rights reserved.