所以我可以做类似的事情
#ifdef MSVC
//do compiler specific code here
#endif
查看 MSVC 预定义宏的列表。你会找到你需要的。
_MSC_VER
可能是一个不错的选择。
_MSC_VER
应该适合您的需求
_MSC_VER 就是这样一个预定义宏。
#if defined(_MSC_VER) && !defined(__clang__)
// code for msvc compiler
#endif
_MSC_VER 用于测试 MS Visual C/C++ 编译器。但是,还有其他可以从 Visual Studio 使用的编译器,这些编译器通常也定义
_MSC_VER
。 predef 已过时,提到旧的英特尔编译器:
Intel 编译器还在 Windows 上定义了 _MSC_VER 和 _MSC_FULL_VER。 (1) 您可以通过检查 __INTEL_COMPILER 是否未定义来排除它。
__INTEL_COMPILER
由经典的 intel 编译器(又名 icc/icl/icpc)定义。在 Windows 上,icl.exe 还定义了 __ICL
,这意味着它使用 clang 前端。
然而,经典的英特尔编译器被新的英特尔基于 llvm 的 icx/icpx 编译器所取代,该编译器不再定义__INTEL_COMPILER
。
定义
_MSC_VER
的一些编译器列表
__ICL
和 __INTEL_COMPILER
__clang__
和 __INTEL_LLVM_COMPILER
__clang__
。注意确保 icl.exe 是否也定义了
__clang__
,如果没有定义并且您想排除经典的 Intel 编译器,那么也许这就是所需要的:
#if defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER)
// code for msvc compiler
#endif