判断MSVC/Intel编译器的正确宏:VS2022下两宏均定义的疑问
关于Intel C++编译器与_MSC_VER、__INTEL_LLVM_COMPILER宏的疑问解答
为什么两个宏会同时被定义?
Intel基于LLVM的C编译器(即当前的Intel oneAPI DPC/C++ Compiler)默认开启了对MSVC的兼容性适配。为了让原本针对MSVC编写的代码能直接编译通过,编译器会自动定义_MSC_VER这类MSVC专属宏;同时它也会定义自身特有的__INTEL_LLVM_COMPILER宏,用来标识当前使用的是Intel LLVM编译器。这种双重宏定义是兼容性设计的正常结果。
正确判断编译器类型的宏
- 检测Intel LLVM编译器:优先检查
__INTEL_LLVM_COMPILER,这个宏是Intel新一代LLVM架构编译器的专属标识,只要被定义就说明当前编译器是Intel LLVM版本。 - 检测MSVC原生编译器:先排除Intel LLVM的情况(即
__INTEL_LLVM_COMPILER未定义),再检查_MSC_VER,它是MSVC原生编译器的版本标识宏。 - 针对旧版Intel Classic Compiler:可以检查
__INTEL_COMPILER,不过这个宏在新一代LLVM编译器中不会被定义,仅适用于传统的Intel编译器版本。
内容的提问来源于stack exchange,提问作者ijklr
相关产品推荐
相关产品推荐

