9

This is both a question and a reference and I am hoping that people can build upon this so that it can be reused by people with similar questions.

How can we reliably detect a particular version of a C/C++/ObjC compiler? Now I know the answer for Visual Studio and partially know the answer for Xcode.

Now for the Visual Studio compiler we have _MSC_VER which is defined with these values:

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) 

Now for the Xcode compiler we have this define:

__APPLE_CC__ 

But the only values I've managed to find via google (Mac docs don't seem to have these values) are:

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) 

Can anyone complete this list or provide links to a full list? And maybe we can provide information for other compilers too.

9
  • 2
    Neither Visual Studio nor Xcode are compilers - you shouldn't care about their version. Commented Aug 28, 2010 at 22:52
  • 3
    @mathepic I'm as pedantic as the next guy, but really? VS comes with a specific version of the frontend compilers for each revision of the IDE, and exposes that version through _MSC_VER; that's what he wants Commented Aug 28, 2010 at 22:54
  • 1
    Let me make myself clear then. Yes they are both IDEs but they both packaged with their own compilers, which is what I was talking about. I hoped that was clear from my message. Commented Aug 28, 2010 at 22:57
  • 2
    Maybe you should make the language obvious and talk in terms of C++ compilers, not IDEs. VS comes packaged with several compilers (C++, VB.NET, C#, F#, maybe others). I believed the same goes for XCode (C++, Objective-C, maybe others). Commented Aug 28, 2010 at 23:01
  • 2
    People are so pedantic on this site :) I've edited the original question to say the Xcode compiler. What more do you guys need? I am assuming that people have a modicum of intelligence and recognise what these defines are about. If people know about APPLE_CC and do a google search and come up with this page and find the numbers they are looking for then that would be great! But you have a good point about LLVM. Does LLVM that is packaged with Xcode have different APPLE_CC values or not? Commented Aug 28, 2010 at 23:33

2 Answers 2

1

As someone who has ported more than his fair share of 'C' around, I can see were you are coming from, so here is some to get us started:

For IBM CL/C++ compiler product:

__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. 

For Borland C:

___BORLANDC__ ?? 

For GNU C:

__GNUC__ ?? 

For Watcon C:

__WATCOMC__ 
Sign up to request clarification or add additional context in comments.

2 Comments

Do you happen to know how to get the same information about C# compilers? In VS for C# the _MSC_VER is no longer available. What is?
I do not know any pre-defines in Microsoft C# compiler but the mono compiled does have 'MonoCS' which has provided to be handy.. (ohh you do have DEBUG)
0

There is a table of this information here:

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

Sadly, It appears that MacOS defines __clang__, __GNUCC__ and __llvm__ so this information can get a little confused.

But usually, only one set of information applies.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.