visual-studio - 在编译时检测编译器版本

标签 visual-studio xcode compiler-construction

这既是一个问题也是一个引用,我希望人们可以以此为基础,以便有类似问题的人可以重复使用。

我们如何可靠地检测特定版本的 C/C++/ObjC 编译器?现在我知道了 Visual Studio 的答案并且部分知道了 Xcode 的答案。

现在对于 Visual Studio 编译器,我们有 _MSC_VER 用这些值定义:

Version 1.0    800
Version 2.0    900
Version 2.x    900
Version 4.0    1000
Version 5.0    1100
Version 6.0    1200
Version 7.0    1300
Version 7.1    1310
Version 8.0    1400  (Visual Studio 2005)
Version 9.0    1500  (Visual Studio 2008)
Version 10.0   1600  (Visual Studio 2010)
Version 11.0   1700  (Visual Studio 2012)

现在对于 Xcode 编译器,我们有这样的定义:
__APPLE_CC__

但我设法通过谷歌找到的唯一值(Mac 文档似乎没有这些值)是:
Xcode 3.0              5465
Xcode 3.1              5470
Xcode 3.1 (GCC 4.2)    5553
Xcode 3.2.3            5664  (Got this value from my own compiler)

任何人都可以完成此列表或提供完整列表的链接吗?也许我们也可以为其他编译器提供信息。

最佳答案

作为一个移植了超过他公平份额的“C”的人,我可以看出你来自哪里,所以这里有一些让我们开始:

对于 IBM CL/C++ 编译器产品:

__xlc__  - Format is V.R.M.F eg: "9.0.0.0"
__IBMCPP__ Format is an integer as VRM eg: V9.0 is 900
__IBMC__ - Format is an integer as VRM, 
           which indicates the level of compiler as VRM as:
< 200 is C Set/2
< 300 is C Set++
otherwise is Visual Age C++ V.M.C

           where V=version, M=release, M=modification and F=fix level.

对于 Borland C:
___BORLANDC__ ??

对于 GNU C :
__GNUC__ ??

对于 Watcon C:
__WATCOMC__

关于visual-studio - 在编译时检测编译器版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3592805/

相关文章:

xcode - 没有使用 -destination 标志指定对指定方案有效的目的地

compiler-construction - 尝试编写 LLVM 后端。没有好的教程可用

c++ - 为什么函数中本地定义的结构需要赋值运算符和复制构造函数

c# - 为什么我的 C# 中的 SQL 代码不起作用?

ios - 如何从我的自定义正在进行的调用 UI 结束 callkit 上的调用 session ?

c# - 在 visual studio 中创建大括号的快捷方式

ios - 在 "Performing Install Actions"上构建滞后一分钟

parsing - 在创建抽象语法树的上下文中,综合属性是什么?

c# - 如何在编辑 .aspx 文件时使用 Visual Studio 的 "Code Snippet"功能?

.net - 在 Visual Studio 2017 中使用 Windows 窗体应用程序?