Обнаружение версий компилятора во время компиляции - PullRequest
8 голосов
/ 29 августа 2010

Это и вопрос, и ссылка, и я надеюсь, что люди смогут использовать это для повторного использования людьми с похожими вопросами.

Как мы можем надежно определить конкретную версию 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__

Но единственные значения, которые мне удалось найти через Google (документы 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)

Может ли кто-нибудь заполнить этот список или предоставить ссылки на полный список?И, возможно, мы можем предоставить информацию и другим компиляторам.

Ответы [ 2 ]

1 голос
/ 09 марта 2011

Как человек, который портировал больше, чем его справедливая доля '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__
0 голосов
/ 25 августа 2017

Вот таблица этой информации:

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

К сожалению, похоже, что MacOS определяет __clang__, __GNUCC__ и __llvm__, поэтому эта информация может немного запутаться.

Но обычно применяется только один набор информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...