在编译时检测编译器版本

2024-04-19

这既是一个问题,也是一个参考,我希望人们能够在此基础上进行构建,以便有类似问题的人可以重用它。

我们如何可靠地检测 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__ ??

For GNU C https://gcc.gnu.org/onlinedocs/cpp/Common-Predefined-Macros.html:

__GNUC__ ??

对于沃特康 C:

__WATCOMC__
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在编译时检测编译器版本 的相关文章

  • Visual Studio中设置“目标框架”有什么作用

    在 Visual Studio 中 您可以为项目设置 目标框架 或多或少的常识是 如果将 目标框架 设置为 例如 NET 4 5 2 则应用程序在仅安装了 NET 4 5 1 的计算机上将无法运行 第一个问题 这是真的吗 第二个问题 该设置
  • 生成 xcframework 库时 xcodebuild 错误“不支持具有多个平台的二进制文件”

    我正在尝试从 MyFramework framework 文件生成 xcframework 文件 我正在运行以下命令 xcodebuild create xcframework framework MyFramework framework
  • 以编程方式添加 TabBarController

    我想以编程方式制作标签栏控制器和导航控制器 到目前为止 我的代码有效 它在底部显示了一个选项卡栏 但 OptionViewController 在第二个选项卡栏的按钮上没有说任何内容 没有标题 有趣的是 当我单击没有任何内容的按钮时 标题出
  • Visual Studio 2017 上的简单装配程序

    386 model flat c stack 100h printf PROTO arg1 Ptr Byte data msg1 byte Hello World 0Ah 0 code main proc INVOKE printf ADD
  • Swift 3 中的隐藏按钮

    我刚刚开始编码 我真的很想知道如何隐藏按钮 我想做的是当我按下按钮时 Start 我想让开始按钮和后退按钮消失 这是通过插座和操作完成的 我已经搜索了一下 但是当我想做的时候 它说do关键字应该指定一个语句块 我希望有人能帮助我 连接插座后
  • Xcode -- 让force_load 使用相对路径

    某些库在链接到 Xcode 项目时需要 all load 链接器标志 但是 如果库之间存在符号冲突 这会导致链接器错误 解决方案是使用 force load 它可以有效地让您在某些库上使用 all load 但不能在其他库上使用 然而 这反
  • 如何快速更改 SKSpriteNode 的颜色?

    我创建了一个游戏SKSpriteNode那是黑色的 当用户触摸屏幕时我想要SKSpriteNode更改为白色 我已经用谷歌搜索了一切 并尝试了很多不同的策略 但没有成功 有谁知道如何做到这一点 这是我的场景的代码 var blackBird
  • 将 ART.xcodeproj 添加到 Library 后 Xcode 崩溃

    我正在使用 React Native 开发一个应用程序 将 ART xcodeproj 添加到 Library 后 Xcode 崩溃了 这是版本信息 版本 9 0 beta 4 9M189t Some 崩溃的日志如下 Process Xco
  • 如何设置 Xcode 来代替 Qt Creator 工作?

    我不使用 Qt Creator 的 UI 设计功能 对于一个新项目 我想体验一下使用 Xcode 的工作 这将是一个常规的 Qt 项目 使用 C 和 Qt 库开发 就像在 Qt Creator 中一样 我没有使用 OS X 尤其是 Xcod
  • Visual Studio 2017 ASP.Net 发布独立的 Dot Net Core 应用程序

    我在 Visual Studio 2017 中有一个 Net Core ASP Net 应用程序 我正在尝试对该应用程序进行独立部署 如果我从 CLI 运行以下命令 它会完全按照我想要的方式工作并生成 exe dotnet publish
  • 具有不同设置的 Visual Studio 实例

    我想运行两个具有不同设置的 Visual Studio 实例 其中一个具有更大的字体 我怎么做 当我运行 vs 的第二个实例时 devenv exe ResetSettings other vssettings 该设置会影响 Visual
  • 使用 gcc 的中间 GIMPLE 格式

    根据本文 http en wikipedia org wiki Intermediate languagegcc 在生成代码之前使用多种中间格式 我读到 GIMPLE 格式使用三个地址代码 这似乎是最容易使用的中间语言 但我需要更多细节 因
  • 使用 use_frameworks 签名错误!和独特的配置文件

    我将最初讨论中的最后一篇文章粘贴到此处 https github com CocoaPods CocoaPods issues 4331 https github com CocoaPods CocoaPods issues 4331 这个
  • xCode Cocoapods 构建失败“架构 x86_64 的未定义符号”

    我想为模拟器和真实设备构建我的 Xcode 项目 本地反应和快速 模拟器效果很好 今天我尝试为我的设备构建它 我在 Xcode 栏中选择了我的设备并添加了要发布的方案 我必须这样做 因为我使用的是 React Native 否则捆绑包未打包
  • 如何从 NetService 获取 IP 地址

    当我得到一个 NetService 对象时 我尝试这样做 NSNetService ss netArray objectAtIndex indexPath row ss delegate self ss resolveWithTimeout
  • 如何在 Xcode 中设置 Mac 应用程序的图标?

    我学习了很多关于编写 Objective C 代码和在 Interface Builder 中进行设计的知识 并且我想为我的简单程序设置图标 我将相同的 JPG 添加到 Icon Composer 中的所有尺寸字段并获得了 ICNS 但我不
  • 当我使用 yymore() 时,在 EOF 处出现 Flex 错误“缓冲区末尾丢失”

    我正在编写一个 Flex 程序来处理字符串常量 当输入文件在字符串中遇到 EOF 时 我想返回一个 ERROR 标记 文件遇到 EOF 并打印 ERROR 后出现以下错误 致命的 Flex 扫描仪内部错误 缓冲区末尾丢失 这是我的代码 可以
  • Xcode 4 上的 Boost 库静态链接

    我在 OS X 上使用 Xcode 使用 Boost 库 Boost 使用 macports 安装在我的系统上 通过将我需要的 3 个 boost 库 例如 libboost thread mt a 添加到 Targets Link Bin
  • 请求开发者证书的分发配置文件

    使用 Xcode 9 1 构建 iOS 应用程序后 我尝试将其存档 但我收到以下错误消息 配置文件 MyAppProfile 不包括签名证书 iPhone Developer My Name X1YZ2AB3CD 仔细观察后 我发现 MyA
  • 有什么方法可以延迟 Visual Studio 中智能感知的淡入时间吗?

    我刚刚切换到 VS2008 智能感知比 2005 年更加 有用 我发现它真的打破了我的注意力 每次我到达标记或关键词或其他任何内容的末尾时 它都会弹出 我必须按 ESC 或忽略它 这是really恼人的 我无法找到延迟其激活的设置 我确实想

随机推荐