【问题标题】:Detecting compiler versions during compile time在编译时检测编译器版本
【发布时间】:2011-04-05 07:15:13
【问题描述】:

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

我们如何可靠地检测特定版本的 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)

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

【问题讨论】:

  • Visual Studio 和 Xcode 都不是编译器 - 你不应该关心它们的版本。
  • @mathepic 我和旁边的人一样迂腐,但真的吗? VS 为 IDE 的每个版本都提供了特定版本的前端编译器,并通过 _MSC_VER 公开该版本;这就是他想要的
  • 那么让我说清楚。是的,它们都是 IDE,但它们都使用自己的编译器打包,这就是我所说的。我希望从我的信息中可以清楚地看到这一点。
  • 也许你应该让语言变得明显,并根据 C++ 编译器而不是 IDE 来讨论。 VS 附带了几个编译器(C++、VB.NET、C#、F#,也许还有其他)。我相信 XCode(C++、Objective-C,也许还有其他)也是如此。
  • 这个网站上的人太迂腐了 :) 我编辑了原始问题,说 Xcode 编译器。你们还需要什么?我假设人们有一点点智力,并认识到这些定义是关于什么的。如果人们知道 APPLE_CC 并进行谷歌搜索并提出此页面并找到他们正在寻找的号码,那就太好了!但是您对 LLVM 有一个很好的看法。用 Xcode 打包的 LLVM 是否有不同的 APPLE_CC 值?

标签: visual-studio xcode compiler-construction


【解决方案1】:

作为一个移植了超过他应得的“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__

【讨论】:

  • 您是否知道如何获得有关 C# 编译器的相同信息?在 VS for C# 中,_MSC_VER 不再可用。什么是?
  • 我不知道 Microsoft C# 编译器中的任何预定义,但编译的单声道确实有 'MonoCS' 提供了方便..(哦,你确实有调试)
【解决方案2】:

这里有这个信息的表格:

https://sourceforge.net/p/predef/wiki/Compilers/

遗憾的是,MacOS 似乎定义了 __clang____GNUCC____llvm__,因此这些信息可能会有些混乱。

但通常只有一组信息适用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-24
    相关资源
    最近更新 更多