Как узнать версию компилятора visual studio
В PHP я бы сделал что-то вроде этого: phpinfo(); в Java: java -version
Этот вопрос не отвечает на него, хотя название предполагает, что оно должно.
Чтобы получить версию фреймворка - посмотрите на версию одной из основных сборок, т.е.
Если вы используете компилятор командной строки (csc.exe), вы можете проверить справку, чтобы увидеть версию (также вам в любом случае нужно знать версию Framework:
Никто еще не упомянул, что правильной инструкцией для получения списка версий, поддерживаемых вашим компилятором Roslyn, является «C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ csc.exe» / langversion :?
Вот краткая версия его ответа.
Хотя это не отвечает на ваш вопрос напрямую, я размещаю это здесь, так как Google поднял эту страницу первым в моих поисках, когда я искал эту информацию.
Если вы используете Visual Studio , вы можете щелкнуть правой кнопкой мыши по своему проекту -> Свойства -> Построить -> Расширенные. В этом списке будут перечислены доступные версии, а также версия, которую использует ваш proj.
Какая у меня версия, если в раскрывающемся списке я вижу Automatically selected based on framework version и не могу ничего выбрать из раскрывающегося списка (она отключена)? Я использую VS 2019.
HKEY_LOCAL_MACHINE \ ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ \ Microsoft \ NET Framework Setup \ NDP \ исследуют дочерние элементы и изучают каждую версию. Один с ключом «Полный» - это версия в системе.
Откройте System.dll, щелкните правой кнопкой мыши -> Свойства -> вкладка Сведения
Помощь -> О Microsoft Visual Studio
Вы также можете изменить версию, пожалуйста, следуйте инструкциям ниже.
Откройте окно свойств проекта:
Из командной строки разработчика введите
Спасибо @fortesl и этому ответу
Не уверен, что csc-версия идентифицирует:
Если вы используете VS2015, выполните следующие действия, чтобы узнать то же самое:
- Щелкните правой кнопкой мыши на проекте.
- Нажмите на вкладку Свойства .
- В окне свойств выберите опцию Build .
- В этом нажмите на кнопку Advance .
- Там вы узнаете языковую версию.
Ниже изображения показывают шаги для того же самого:
Откройте командную строку Visual Studio и просто введите csc, затем нажмите Enter.
Вы увидите что-то вроде следующего:
Для Windows вы запускаете dev в командной строке программы поиска и выбираете командную строку разработчика для VS. Тогда ты будешь просто бежать
Теперь вы получаете информацию, аналогичную
Для Windows, и если вы начинаете с терминала CMD
Языковая версия выбирается на основе целевой структуры проекта по умолчанию.
Я мог видеть следующее из документов Microsoft.
Компилятор определяет значение по умолчанию на основе этих правил:
-
щелкните правой кнопкой мыши проект в обозревателе решений и выберите Свойства
Чтобы увидеть точную версию языка компилятора для «по умолчанию», введите следующую команду в командной строке разработчика для установленной версии Visual Studio. Например, из значка «Пуск» Windows выберите значок «Командная строка разработчика для VS2011» и введите:
быстрый компилятор ?
Скажите есть самый быстрый компилятор ? Мне надо чтобы побыстрее ваводил всё ато не успеваю писать.
Не компилирует ни 1 компилятор
Добрый день. У меня странная проблема( мне кажется из разряда мистики) Что я делаю: 1)Создаю.
Компилятор ms visual c++
Не могу найти описание к компилятору ms visual c++ 2005 на русском языке. Там оч много всяких.
1)переходим в папку
2)C:\Program Files\Microsoft Visual Studio 8\VC\bin\
3)выделяем файл cl.exe
4)Жмём Alt+Enter
5)Переходим на закладку версия.
у меня 8.00.50727.42
Быстрый компилятор ?
Скажите есть самый быстрый компилятор ? Мне надо чтобы побыстрее ваводил всё ато не успеваю писать.
C/C++ компилятор под андроид
Есть ли такой компилятор, который мог бы скомпилировать c++ код под андроид, или хотя бы на IOS и.
Как установить компилятор ?
Дело в том что купил ноутбук на 10 ке. Еще не разобрался, так как не могу. В общем таблетки не мог.
Какой использовать компилятор?
Поставил NetBeans на Windows. Хочу использовать для C++. Поставил Cygwin, по началу работал, через.
На этом компьютере у меня установлены Visual Studio 2010, 2013, 2015 и 2017.
И когда я набираю ту же команду на другом ноутбуке, где у меня установлен только Visual Studio 2013, я получаю следующий вывод из команды csc.exe .
Есть ли способ выяснить версию компилятора в коде?
можно ли получить версию компилятора в коде? например, используя некоторые директивы компилятора?
Я пытаюсь узнать о версии компилятора, а затем скажем, если версия Gcc или же Visual C++ является C++11 совместим, а затем скомпилировать этот бит кода, а если нет, то вместо этого скомпилировать этот фрагмент
Решение
В gcc и clang вы можете использовать __VERSION__ макро.
Другие решения
Ты можешь использовать __cplusplus макрос для проверки, поддерживает ли компилятор C ++ 11, чтобы он работал даже на тех компиляторах, о которых вы не знаете.
16.8 Предопределенные имена макросов
1 Следующие имена макросов должны быть определены __cplusplus
Имя __cplusplus определяется значением 201103L при компиляции модуля перевода C ++.
157) Предполагается, что будущие версии этого стандарта заменят значение этого макроса на большее значение. Несоответствующие компиляторы должны использовать значение не более пяти десятичных цифр.
Если вы хотите узнать, какой компилятор вы используете, у них есть собственные предопределенные макросы для этого, связанные в других комментариях. Но вы указываете, что делаете это для того, чтобы обнаружить наличие поддержки C ++ 11. В этом случае правильный код
Если вы используете компилятор командной строки (csc.exe), вы можете проверить справку для просмотра версии (также вам нужно знать версию Framework в любом случае:
Вот короткая версия его ответа.
В то время как это не отвечает на ваш вопрос напрямую, я помещаю это здесь, поскольку Google привнес эту страницу в первую очередь в мои поиски, когда я искал эту информацию.
Через dll
Вы также можете изменить версию, пожалуйста, выполните следующие шаги.
Откройте окно свойств проекта:
Откройте командную строку Visual Studio и просто введите csc и нажмите Enter.
Вы увидите следующее:
Для Windows вы запускаете dev в строке программы/поиска и выбираете команду командной строки разработчика для VS. Тогда вы собираетесь просто запустить
Теперь вы получаете информацию, аналогичную
Для Windows и если вы начинаете с CMD-терминала
Из командной строки разработчика введите
Если вы используете VS2015, выполните следующие действия, чтобы узнать то же самое:
- Щелкните правой кнопкой мыши на проекте.
- Нажмите на вкладку Свойства.
- В окне свойств выберите опцию Build.
- В этом нажмите на кнопку Advance.
- Там вы узнаете языковую версию.
Ниже изображения показывают шаги для того же:
Благодаря @fortesl и этому ответу
Узнать версию компилятора по итоговой программе
У меня есть исполняемый файл. Достоверно известно, что он скомпилирован в чём-то из пакета Visual Studio. Можно ли узнать версию компилятора и студии, с помощью которых этот файл был создан?
В общем случае это сделать крайне сложно. Но обычно это достаточно легко. Для этого понадобится программа Dependency Walker — раньше она шла с студией, а сейчас можно просто поискать в интернете (или любая другая, которая показывает, какие dll требуются программе). В списке dll ищем что то похожее на VC*XXX.DLL , где * — какие то символы, ХХХ — цифры. По цифрам легко угадать, к примеру VCRUNTIME140.DLL — это компилятор от 2015 студии (версия компилятора 14.0). Другие соостветствия можно посмотреть хоть в wikipedia.
2017 студия умеет использовать компилятор от 2015 студии. Поэтому, если версию компилятора легко угадать, то версию студии часто просто не возможно (никто не мешает писать код в блокноте или visual studio code).
Также существуют разные программы, которые ищут "отпечатки компилятора" (fingerprint). Например, PEiD. Но большинство таких программ обычно являются "инструментами взломщика".
Есть ли способ определить, какая версия Visual Studio использовалась для компиляции статической библиотеки?
У меня есть коллекция статических библиотек (.lib) файлы, один из которых может быть построен с другой версией Visual Studio. Это приводит к сбою генерации кода проекта, который связывается со всеми из них. Есть ли способ определить, какая версия Visual Studio использовалась для компиляции статической библиотеки?
для библиотек выпуска маловероятно, что вы сможете определить версию.
для библиотек отладки можно использовать команду dumpbin:
манифест сборки должен находиться в начале дампа и содержать версию CRT, требуемую библиотекой, а также полный путь к компилятору, используемому для построения библиотеки.
для исполняемых файлов и DLL вы можете получить версию компоновщика с помощью dumpbin; он находится под " необязательным заголовком Значения"
возможно, кто-то еще знает способ получить версию для библиотек выпуска; мне, конечно, тоже интересно, если они есть.
Я всегда использовал что-то вроде (в окне cygwin):
компилятор вставляет путь компилятора в библиотеку при построениях отладки, а расположение компилятора Visual Studio по умолчанию находится под путем, который включает текст "Visual Studio".
Я нашел этот метод много лет назад через немного провидчества, и он еще не потерпел неудачу.
Это имеет то преимущество, что его легко запомнить, если вы знакомы с инструментами командной строки Unix.
Если у вас есть соответствующий .PDB файлы, то вы можете увидеть версию компилятора оттуда с помощью инструмента, как Pdb Инспектор.
или откройте PDB в шестнадцатеричном средстве просмотра и найдите строку "Microsoft (R) Optimizing Compiler". Версия будет иметь четыре 2-байтовых шестнадцатеричных значения непосредственно перед этой строкой, как в этом примере:
версия, таким образом, HEX 13 00, 00 00, 6E 5D, 00 00 или 19.0.23918.0.
Если статическая библиотека была написана на C++ и была построена с MSVC 2010 или более новой версией, директива FAILIFMISMATCH могла быть помещена компилятором в объектные файлы.
Я не могу найти официальный документ от Microsoft о директиве FAILIFMISMATCH, но, похоже, он используется компоновщиком для обнаружения несовместимости между версиями стандартной библиотеки C++.
вы можете использовать следующую команду для распечатки этих директив из статического библиотека:
(или используйте способ, который mheyman упомянул, если вы предпочитаете cygwin или msys)
результат может быть похож на этот:
обратите внимание на первую директиву: "_MSC_VER=NNNN". По моему наблюдению, NNNN всегда соответствует версии компилятора, используемой для создания объектного файла. В моем случае, xyz.lib был создан с обновлением MSVC 2015 3, его версия компилятора C++ — 19.00.24215, поэтому он поместил /FAILIFMISMATCH: "_MSC_VER=1900" в объект файл.
можно найти подробное сопоставление между версией Visual Studio и версией компилятора Microsoft C/C++здесь.
был бы эквивалент в управляемом C++ / CLI
MSVC (компилятор Microsoft C/C++) предоставляет предопределенные макросы препроцессора (predefined preprocessor macros), зависящие от используемого языка (C или C++), целевой платформы компиляции (compilation target) и выбранных опций компилятора.
MSVC поддерживает predefined preprocessor macros, требуемые стандартом ANSI/ISO C99 и стандартами ISO C++14 и C++17. Реализация компилятора также поддерживает некоторые макросы, больше специфичные именно для Microsoft. Некоторые макросы определены только для специфической платформы сборки или опций компилятора. Кроме случаев, где это отмечено, эти макросы определены в любом месте единицы трансляции, как если бы они были бы указаны с помощью аргументов опции /D компилятора. Будучи определенными, эти макросы разворачиваются препроцессором перед компиляцией в определенные значения. У predefined-макросов нет аргументов, и они не могут быть переопределены.
[__func__ - стандартный предопределенный идентификатор]
Компилятор поддерживает предопределенный идентификатор, предусмотренный стандартами ISO C99 и ISO C++11. Ключевое слово / макрос __func__ представляет неполное и "не украшенное" (т. е. без префиксов подчеркивания) имя окружающей функции (т. е. функции, где используется __func__) как статический массив символов (static const *char), в котором содержится имя функции.
Пример на C++, который напечатает имя функции "example":
[Стандартные предопределенные макросы]
Компилятор поддерживает следующие предопределенные макросы, описанные стандартами ISO C99 и ISO C++17.
__cplusplus Определен как целочисленный литерал, когда единица трансляции компилируется как код C++. Если это не так (например, идет компиляция кода как языка C), то __cplusplus не определен.
__DATE__ Дата компиляции текущего исходного файла. Дата это строковая константа постоянной длины в форме Mmm dd yyyy. Имя месяца Mmm такое же, как аббревиатурное имя месяца, генерируемое функцией asctime библиотеки C Runtime (CRT). Первый символ даты dd будет пробелом, если значение даты меньше 10. Этот макрос определен всегда.
__FILE__ Имя текущего исходного файла. Макрос __FILE__ разворачивается в символьный строковый литерал. Чтобы обеспечит полное имя файла в в этом литерале, используйте опцию /FC компилятора [2]. Этот макрос определен всегда.
__STDC__ Определен как 1 только когда модуль компилируется как код языка C, и если указана опция компилятора /Za [3]. Иначе макрос __STDC__ не определен.
__STDC_HOSTED__ Определен как 1, если это так называемая размещенная реализация (hosted implementation), поддерживающая всю необходимую стандартную библиотеку. Иначе __STDC_HOSTED__ определен как 0.
__STDCPP_THREADS__ Определен как 1, если и только если программа может иметь больше одного потока выполнения, и скомпилирована как код C++. Иначе макрос __STDCPP_THREADS__ не определен.
__TIME__ Представление времени обрабатываемого элемента трансляции. Время представлено литеральной строкой символов в форме hh:mm:ss, в таком же виде как время, возвращенная функцией asctime библиотеки CRT. Этот макрос определен всегда.
[Предопределенные макросы, специфические для Microsoft]
MSVC поддерживает следующие дополнительные predefined-макросы.
__ATOM__ Определен как 1, когда установлена опция компилятора /favor:ATOM, и цель компиляции x86 или x64. Иначе макрос __ATOM__ не определен.
__AVX__ Определен как 1, когда установлена опция компилятора /arch:AVX или /arch:AVX2, и цель компиляции x86 или x64. Иначе макрос __AVX__ не определен.
__AVX2__ Определен как 1, когда установлена опция компилятора /arch:AVX2, и цель компиляции x86 или x64. Иначе макрос __AVX2__ не определен.
_CHAR_UNSIGNED Определен как 1, когда тип по умолчанию для char без знака (unsigned). Это значение определено, когда установлена опция компилятора /J [4]. Иначе макрос _CHAR_UNSIGNED не определен.
__CLR_VER Определен как целочисленный литерал, представляющий версию общей языковой среды выполнения (Common Language Runtime, CLR), используемой для компиляции приложения. Это значение кодируется в виде Mmmbbbbb, где M это основная (major) версия исполняемого (runtime) кода, mm дополнительная (minor) версия runtime-кода, и bbbbb это номер сборки. Макрос __CLR_VER определен, если установлена опция компилятора /clr, иначе не определен.
_CONTROL_FLOW_GUARD Определен как 1, когда установлена опция компилятора /guard:cf [5]. Иначе макрос _CONTROL_FLOW_GUARD не определен.
__COUNTER__ Раскрывается как целочисленный литерал, начинающийся с 0. Это значение инкрементируется на 1 каждый раз, когда макрос __COUNTER__ используется в исходном файле или заголовочном файле, подключенном в исходном файле. __COUNTER__ запоминает свое состояние, когда используются precompiled headers [26]. Этот макрос определен всегда.
Ниже показан пример, где __COUNTER__ используется для назначения уникальных идентификаторов трем разным объектам одинакового типа. Конструктор exampleClass принимает целое число в качестве параметра. В теле функции main приложение декларирует три объекта типа exampleClass, используя __COUNTER__ в качестве уникального идентификатора для параметра:
__cplusplus_cli Определен как целое литеральное значение 200406, когда код компилируется как C++, и установлена опция компилятора /clr. Иначе __cplusplus_cli не определен. Будучи определенным, __cplusplus_cli действует на протяжении всей единицы трансляции.
__cplusplus_winrt Определен как целочисленный литерал со значением 201009, когда код компилируется как C++ и установлена опция компилятора /ZW [6]. Иначе __cplusplus_winrt не определен.
_CPPRTTI Определен как 1, если установлена опция компилятора /GR [7]. Иначе _CPPRTTI не определен.
_CPPUNWIND Определен как 1, если определена одна из опций (или большее их количество) /GX [8], /clr [9] или /EH [10]. Иначе _CPPUNWIND.
_DEBUG Определен как 1, когда установлена опция компилятора /LDd, /MDd или /MTd [11]. Иначе _DEBUG не определен.
_DLL Определен как 1, когда установлена опция компилятора /MD или /MDd (Multithreaded DLL) [11]. Иначе _DLL не определен.
__FUNCDNAME__ Определен как строковый литерал, содержащий декорированное имя функции, которая содержит в себе макрос __FUNCDNAME__. Этот макрос определен только внутри использующей его функции. Макрос __FUNCDNAME__ не раскрывается, если используются опции компилятора /EP [12] или /P [13].
Пример ниже использует макросы __FUNCDNAME__, __FUNCSIG__ и __FUNCTION__, чтобы показать информацию о функции.
__FUNCSIG__ Определен как строковый литерал, содержащий сигнатуру окружающей макрос функции. Этот макрос определен только в пределах использующей его функции. Макрос __FUNCSIG__ не разворачивается, если используются опции компиляции /EP или /P [12, 13]. Когда компиляция происходит для 64-битной цели, то умолчанию используется соглашение о вызовах (calling convention) __cdecl. Пример использования см. в описании макроса __FUNCDNAME__.
__FUNCTION__ Определен как строковый литерал, содержащий не декорированное имя окружающей макрос функции. Этот макрос определен только в пределах использующей его функции. Макрос __FUNCSIG__ не разворачивается, если используются опции компиляции /EP или /P [12, 13]. Пример использования см. в описании макроса __FUNCDNAME__.
_INTEGRAL_MAX_BITS Определен как целочисленный литерал со значением 64, показывающий максимальный размер (в битах) для не векторного целого типа. Этот макрос определен всегда.
__INTELLISENSE__ Определен как 1 во время IntelliSense прохода компилятора в среде Visual Studio IDE. Иначе макрос __INTELLISENSE__ не определен. Вы можете использовать этот макрос для защиты кода, который не понимает IntelliSense-компилятор, или для переключения между сборкой и компилятором IntelliSense. Для дополнительной информации см. статью с описанием решения проблем с производительностью IntelliSense [14].
_ISO_VOLATILE Определен как 1, если установлена опция компилятора /volatile:iso [15], иначе не определен.
_KERNEL_MODE Определен как 1, если установлена опция компилятора /kernel [16], иначе не определен.
_M_AMD64 Определен как целочисленный литерал со значением 100 для компиляций, нацеленных на процессор x64, иначе не определен.
_M_ARM Определен как целочисленный литерал со значением 7 для компиляций, нацеленных на процессоры ARM, иначе не определен.
_M_ARM_ARMV7VE Определен как 1, когда установлена опция /arch:ARMv7VE [17] для компиляций, нацеленных на процессоры ARM, иначе не определен.
_M_ARM_FP Определен как целочисленное литеральное значение, которое показывает, какая была установлена опция /arch [17] для целевых процессоров ARM. Иначе макрос _M_ARM_FP не определен.
Значение макроса будет в диапазоне 30-39, если не была указана опция /arch ARM. Это показывает, что была установлена архитектура ARM по умолчанию (VFPv3). Значение в диапазоне 40-49, если была установлена опция /arch:VFPv4. Дополнительную информацию см. в [17].
_M_ARM64 Определен как 1 для компиляций, нацеленных на 64-битные процессоры ARM, иначе не определен.
_M_CEE Определен как 001, если установлена любая из опций компилятора /clr [9], иначе не определен.
_M_CEE_PURE Этот макрос устарел начиная с Visual Studio 2015. Определен как 001, если установлена опция компилятора /clr:pure [9], иначе не определен.
_M_CEE_SAFE Этот макрос устарел начиная с Visual Studio 2015. Определен как 001, если установлена опция компилятора /clr:safe [9], иначе не определен.
_M_FP_EXCEPT Определен как 1, если установлена опция компилятора /fp:except или /fp:strict [18], иначе не определен.
_M_FP_FAST Определен как 1, если установлена опция компилятора /fp:fast [18], иначе не определен.
_M_FP_PRECISE Определен как 1, если установлена опция компилятора /fp:precise [18], иначе не определен.
_M_FP_STRICT Определен как 1, если установлена опция компилятора /fp:strict [18], иначе не определен.
_M_IX86 Определен как целочисленный литерал 600 для компиляций, нацеленных на процессоры x86. Этот макрос не определен для целей компиляции x64 или ARM.
_M_IX86_FP Определен как целочисленный литерал, который показывает какая опция /arch [17] компилятора была установлена, или установку по умолчанию. Макрос _M_IX86_FP всегда определен, когда цель компиляции процессор x86, иначе макрос не определен. Когда макрос _M_IX86_FP определен, его значение следующее:
0 если была установлена опция компилятора /arch:IA32.
1 если была установлена опция компилятора /arch:SSE.
2 если была установлена опция компилятора /arch:SSE2, /arch:AVX или /arch:AVX2. Это значение по умолчанию, если не была указана опция компилятора /arch. Когда указана опция /arch:AVX, также будет определен макрос __AVX__. Когда указана опция /arch:AVX2, также будут определены оба макроса __AVX__ и __AVX2__.
Для дополнительной информации см. /arch (x86) [17].
_M_X64 Определен как целочисленный литерал со значением 100 для компиляций, нацеленных на процессоры x64, иначе не определен.
_MANAGED Определен как 1, когда установлена опция компилятора /clr [9], иначе не определен.
_MSC_BUILD Определен как целочисленный литерал, который содержит элемент номера ревизии от номера версии компилятора. Номер ревизии это четвертый элемент из номера версии, где отдельные элементы отделены друг от друга точками. Например, если номер версии компилятора Microsoft C/C++ 15.00.20706.01, то макрос _MSC_BUILD будет вычислен как 1. Этот макрос определен всегда.
_MSC_EXTENSIONS Определен как 1, если установлена опция компилятора /Ze [3], иначе не определен.
_MSC_FULL_VER Определен как целочисленный литерал, кодирующий элементы major, minor и build номера версии компилятора. Номер major это первый элемент версии компилятора, minor второй элемент, и build третий элемент. Например, если номер версии компилятора Microsoft C/C++ 15.00.20706.01, то макрос _MSC_FULL_VER вычисляется как 150020706. Чтобы узнать номер версии компилятора, выполните команду cl /?. Этот макрос определен всегда.
_MSC_VER Определен как целочисленный литерал, кодирующий элементы major и minor номера версии компилятора. Номер major это первый элемент версии компилятора, minor второй элемент. Например, если номер версии компилятора Microsoft C/C++ 17.00.51106.1, то макрос _MSC_VER будет вычислен как 1700. Чтобы узнать номер версии компилятора, выполните команду cl /?. Этот макрос определен всегда.
Также см. статью о версиях компиляторов MSVC [19].
_MSVC_LANG Определен как целочисленный литерал, показывающий стандарт языка C++, на который нацелен компилятор. Этот макрос устанавливается только в коде, скомпилированном как C++. По умолчанию, или когда указана опция компилятора /std:c++14, значение макроса _MSVC_LANG будет 201402L. Макрос установится в значение 201703L, если была указана опция /std:c++17 компилятора. Макрос получит большее, не указанное значение, когда указана опция /std:c++latest. Иначе макрос _MSVC_LANG не определен. Макрос _MSVC_LANG и опция компилятора /std [20] впервые появилась в релизе Visual Studio 2015 Update 3.
__MSVC_RUNTIME_CHECKS Определен как 1, когда установлена одна из опций компилятора /RTC, иначе не определен.
_MT Определен как 1, когда указана опция компилятора /MD, или /MDd, или /MT, или /MTd [11], иначе не определен.
_NATIVE_WCHAR_T_DEFINED Определен как 1, когда установлена опция компилятора /Zc:wchar_t [22], иначе не определен.
_OPENMP Определен как целочисленный литерал 200203, если установлена опция компилятора /openmp [23]. Это значение представляет дату спецификации OpenMP, реализованной MSVC. Иначе макрос _OPENMP не определен.
_PREFAST_ Определен как 1, когда установлена опция компилятора /analyze [24], иначе не определен.
__TIMESTAMP__ Определен как как литеральная строка символов, содержащая дату и время последней модификации исходного файла. Строка имеет постоянную длину и сформирована в аббревиатурной форме, где содержится время и дата, как они выводятся функцией asctime библиотеки CRT. Например, Fri 19 Aug 13:32:58 2016. Этот макрос определен всегда.
_VC_NODEFAULTLIB Определен как 1, когда установлена опция компилятора /Zl [25], иначе не определен.
_WCHAR_T_DEFINED Определен как 1, когда установлена по умолчанию опция компилятора /Zc:wchar_t [22]. Макрос _WCHAR_T_DEFINED определен, но у него нет значения, если была установлена опция компилятора /Zc:wchar_t-, и wchar_t определен системным заголовочным файлом, подключенным к проекту. Иначе макрос _WCHAR_T_DEFINED не определен.
_WIN32 Определен как 1, когда цель компиляции 32-bit ARM, 64-bit ARM, x86 или x64. Иначе макрос _WIN32 не определен.
_WIN64 Определен как 1, когда цель компиляции 64-bit ARM или x64, иначе не определен.
_WINRT_DLL Определен как 1, когда код компилируется как C++, и установлены обе опции компилятора /ZW [6] и /LD или /LDd [11]. Иначе макрос _WINRT_DLL не определен.
Не существует макросов препроцессора компилятора, которые идентифицировали бы версию библиотеки ATL или MFC. Заголовочные файлы библиотек ATL и MFC внутри себя определяют эти макросы версий. Их определение отменяется директивами препроцессора перед тем, как подключается требуемый заголовочный файл.
_ATL_VER Определен в заголовке < atldef.h>как целочисленный литерал, кодирующий номер версии ATL.
_MFC_VER Определен в заголовке < afxver_.h>как целочисленный литерал, кодирующий номер версии MFC.
[Ссылки]
Есть ли способ узнать, компилирую ли я под определенную версию Microsoft Visual Studio?
_MSC_VER и, возможно, _MSC_FULL_VER это то, что вам нужно. Вы также можете проверить visualc.hpp в любой недавней установке для некоторых примеров использования.
Некоторые значения для более поздних версий компилятора:
Номер версии выше, конечно, относится к основной версии вашей Visual Studio, которую вы видите в поле about, а не к году в названии. Подробный список можно найти здесь . Начиная с недавнего времени , Visual Studio начнет монотонно обновлять свои диапазоны, то есть вы должны проверять диапазоны, а не точные значения компилятора.
cl.exe /? даст подсказку об используемой версии, например:
Извините, но почему Microsoft не облегчает поиск этой информации? Этот пост очень полезен, но не обязателен.
Похоже, что этот макрос не отражает версию компилятора, используемую проектом. Т.е., если вы откроете проект VS2010 в более новой версии без обновления проекта, этот макрос не отражает используемый компилятор - только версию IDE.
@thomthom: этот макрос точно отражает версию набора инструментов, используемую выбранной целью проекта сборки. Или более четко: Project-> Properties-> General-> Platform Toolset.
Да, _MSC_VER - это макрос, который даст вам версию компилятора. Последнее число выпусков Visual C ++ было в форме .00. , где 00 - младший номер. Так _MSC_VER что оценим .
Вы можете использовать код как это:
Похоже, что обновления между последовательными выпусками компилятора не были изменены compiler-minor-version , поэтому следующий код не требуется:
Доступ к более подробной информации о версии (например, компилятор номер сборки) можно найти , используя другие переменные встроенный препроцессор здесь .
@ Хосе, правда, мы могли бы упростить его, чтобы просто проверить VC ++ 9 _MSC_VER_ == 1500 , однако, если MS действительно изменила _MSC_VER обновления с помощью компилятора, пакеты обновления и т. Д. (Я не думаю, что они когда-либо имели), тогда == 1500 проверка может прерваться. Вот почему я так закодировал.
__MSC_VER оценивает компоненты старшего и младшего номеров версии компилятора. Это не изменится с обновлением, есть _MSC_FULL_VER с включенным номером сборки тоже, мне никогда не нужно это использовать.
Читайте также: