如果编译器是MSVC,是否有定义的预处理器定义?

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

所以我可以做类似的事情

#ifdef MSVC
//do compiler specific code here
#endif
c++ visual-c++ c-preprocessor
5个回答
119
投票

它是_MSC_VER。更多信息在 MSDN在 predef

但是,请注意其他一些编译器也可能定义它,例如适用于 Windows 的英特尔 C++ 编译器也定义了 _MSC_VER。如果您担心这个问题,请使用

#if _MSC_VER && !__INTEL_COMPILER


15
投票

查看 MSVC 预定义宏的列表。你会找到你需要的。

_MSC_VER
可能是一个不错的选择。


2
投票

_MSC_VER
应该适合您的需求


2
投票

_MSC_VER 就是这样一个预定义宏


0
投票
#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.exe 是否也定义了

__clang__
,如果没有定义并且您想排除经典的 Intel 编译器,那么也许这就是所需要的:

#if defined(_MSC_VER) && !defined(__clang__) && !defined(__INTEL_COMPILER)
// code for msvc compiler
#endif
© www.soinside.com 2019 - 2024. All rights reserved.