Введение
Продукт интегрированной среды разработки Microsoft Visual C++ (MSVC) — компилятор языков программирования C, C++, C++/CLI и C++/CX от Microsoft. MSVC является проприетарным программным обеспечением; изначально это был самостоятельный продукт, но впоследствии он стал частью Visual Studio и доступен в пробной и бесплатной версиях. Он включает инструменты для разработки и отладки кода C++, особенно кода, написанного для Windows API, DirectX и .NET. Для корректной работы многим приложениям требуются перераспределяемые пакеты библиотек времени выполнения Visual C++. Эти пакеты часто устанавливаются отдельно от поддерживаемых ими приложений, что позволяет нескольким приложениям использовать один и тот же пакет при единой установке. Эти перераспределяемые и исполняемые пакеты Visual C++ в основном устанавливаются для стандартных библиотек, используемых многими приложениями.
Microsoft Visual C++ (MSVC) is a compiler for the C, C++, C++/CLI and C++/CX programming languages by Microsoft. MSVC is proprietary software; it was originally a standalone product but later became a part of Visual Studio and made available in both trialware and freeware forms. It features tools for developing and debugging C++ code, especially code written for the Windows API, DirectX and NET. Many applications require redistributable Visual C++ runtime library packages to function correctly. These packages are frequently installed separately from the applications they support, enabling multiple applications to use the package with only a single installation. These Visual C++ redistributable and runtime packages are mostly installed for standard libraries that many applications use.
История
Предшественником Visual C++ был компилятор Microsoft C/C++. Существовали также Microsoft QuickC 2.5 и Microsoft QuickC для Windows 1.0. Компилятор Visual C++ до сих пор известен как Microsoft C/C++, и на момент выпуска Visual C++ 2015 Update 2 его версия составляла 14.0.23918.0.
16-битные версии
Microsoft C 1.0, основанный на Lattice C, был первым C-продуктом Microsoft в 1983 году. Он не соответствовал стандарту K&R C. C 2.0 добавил поддержку больших моделей, позволяя использовать до 1 МБ для сегмента кода и сегмента данных. C 3.0 была первой версией, разработанной внутри Microsoft. Эта версия была ориентирована на совместимость с K&R и последующим стандартом ANSI. Она использовалась внутри Microsoft (для разработки Windows и Xenix) в начале 1984 года и была выпущена в качестве продукта в 1985 году. C 4.0 добавил оптимизации и CodeView — отладчик на уровне исходного кода. C 5.0 добавил оптимизацию циклов и поддержку огромной модели памяти (массивы размером более 64 КБ). C 5.1, выпущенный в 1988 году, позволял компилировать программы для OS/2 1.x. Версия на четырнадцати 5,25" дисках (два из которых объемом 1,2 МБ, остальные — 360 КБ) включала QuickC. Версия на одиннадцати 3,5" дисках объемом 720 КБ, поставляемая с комплектом разработки программного обеспечения OS/2, включала MASM 5.1 (единый исполняемый файл, работавший как под MSDOS, так и под OS/2 1.x). C 6.0, выпущенный в 1989 году, добавил поддержку крошечной модели памяти и улучшенную поддержку стандарта ANSI C89 (в документации прямо указано, что соответствие неполное, но оно достаточно близко для практических целей). В него были добавлены интегрированная среда разработки Programmer's Workbench, глобальный анализ потока управления, просмотрщик исходного кода и новый отладчик. К удивлению многих, C++ не был включен, хотя конкуренты уже предлагали свои решения. C/C++ 7.0 был выпущен в 1992 году. Поддержка OS/2 была прекращена. Для компиляции требовался процессор 386 и поставляемый расширитель DOS 386MAX, хотя для того, чтобы пользователи могли использовать расширители DOS в своих программах, требовался один из нескольких сторонних инструментов, выпущенных позднее. Добавлена встроенная поддержка C++ и MFC (Microsoft Foundation Class Library) 1.0. Visual C++ 1.0, включавший MFC 2.0, был первой версией "Visual" C++, выпущенной в феврале 1993 года. Он соответствовал стандарту Cfront 2.1 и был доступен в двух редакциях: Visual C++ 1.5 был выпущен в декабре 1993 года, включал MFC 2.5 и добавил поддержку OLE 2.0 и ODBC в MFC. Это была первая версия Visual C++, поставляемая только на CD-ROM. Visual C++ 1.51 и 1.52 были доступны по подписке. Visual C++ 1.52b аналогичен 1.52, но не включает комплект разработки элементов управления (Control Development Kit). Visual C++ 1.52c был исправленной версией 1.5. Это последняя и, пожалуй, самая популярная платформа разработки для Microsoft Windows 3.x. Она доступна через Microsoft Developer Network.
Visual C++ 1.5 was released in December 1993, included MFC 2.5, and added OLE 2.0 and ODBC support to MFC. It was the first version of Visual C++ that came only on CD ROM. Visual C++ 1.51 and 1.52 were available as part of a subscription service. Visual C++ 1.52b is similar to 1.52, but does not include the Control Development Kit. Visual C++ 1.52c was a patched version of 1.5. It is the last, and arguably most popular, development platform for Microsoft Windows 3. x. It is available through Microsoft Developer Network.
Строго 32-битные версии
Visual C++ 1.0 (оригинальное название: Visual C++ 32 bit Edition), выпущенный в 1993 году, был первой версией для 32-битной разработки под архитектуру Intel 386. Несмотря на выпуск при доступности 16-битной версии 1.5, он не включал поддержку OLE2 и ODBC. Он также был доступен в составе пакета Visual C++ 16/32 bit Suite, который включал Visual C++ 1.5. Visual C++ 2.0, включавший MFC 3.0, стал первой версией, предназначенной исключительно для 32-битных систем. Во многом эта версия опередила свое время, поскольку Windows 95, тогда известная под кодовым названием "Chicago", еще не была выпущена, а доля рынка Windows NT была невелика. Microsoft включила и обновляла Visual C++ 1.5 в рамках выпусков 2.x до версии 2.1, которая включала Visual C++ 1.52, а также 16-битные и 32-битные версии комплекта разработки средств управления (CDK). Visual C++ 2.x также поддерживал разработку под Win32s. Он доступен через Microsoft Developer Network. Существовала версия Visual C++ 2.0 RISC Edition для процессоров MIPS и Alpha, а также кроссплатформенная версия для Macintosh (набор инструкций 68000). Microsoft Visual C++ Cross Development Edition для Macintosh был дополнением к Visual C++, представлявшим библиотеку Windows Portability Library, первоначально известную как Windows Library for Macintosh, позволяющую разработчикам создавать приложения на основе API Win32 и MFC, которые можно было компилировать для компьютеров Macintosh с архитектурой 68000. Visual C++ 2.1 и 2.2 были обновлениями для версии 2.0, доступными по подписке. Visual C++ 4.0, выпущенный 11 декабря 1995 года, представил интегрированную среду разработки Developer Studio. Его инновационная компоновка с неперекрывающимися панелями – панель навигации, панель редактора/отладчика на уровне исходного кода и панель вывода консоли – сохранилась в линейке продуктов Visual Studio (по состоянию на 2013 год). Visual C++ 4.0 включал MFC 4.0 и был разработан для Windows 95 и Windows NT. Для поддержки устаревших проектов (Windows 3.x/DOS) версия 4.0 поставлялась с установочным диском Visual C++ 1.52. Обновления, доступные по подписке, включали Visual C++ 4.1, который поставлялся с SDK Microsoft Game (позже выпущенный отдельно как DirectX SDK), и Visual C++ 4.2. Номер версии 3.0 был пропущен для обеспечения соответствия нумерации между Visual C++ 4.0 и MFC 4.0. Visual C++ 4.2 не поддерживал разработку под Windows 3.x (Win32s). Это была последняя версия с кроссплатформенной редакцией для Mac, которая отличалась от версии 2.x тем, что также позволяла компилировать код для архитектуры PowerPC. Visual C++ 5.0 (входящий в состав Visual Studio 97), включавший MFC 4.21 и выпущенный 28 апреля 1997 года, был доступен в четырех редакциях: Learning, Professional, Enterprise и RISC. Visual C++ 6.0 (обычно известный как VC6 и доступный как отдельное приложение в редакциях Standard, Professional и Enterprise, а также в составе Visual Studio 6.0), включавший MFC 6.0, был выпущен в 1998 году. Выпуск вызвал некоторую полемику, поскольку не включал ожидаемого обновления MFC. Visual C++ 6.0 по-прежнему достаточно популярен и часто используется для поддержки устаревших проектов. Однако в этой версии под Windows XP возникают проблемы, особенно в режиме отладки (например, значения статических переменных не отображаются). Проблемы с отладкой можно решить с помощью патча под названием "Visual C++ 6.0 Processor Pack". Номер версии: 12.00.8804. Visual C++ NET 2002 (также известный как Visual C++ 7.0), включавший MFC 7.0, был выпущен в 2002 году с поддержкой генерации кода во время компоновки, проверок времени выполнения отладки, .NET 1.0, Visual C# и Managed C++. Новый пользовательский интерфейс использовал многие горячие клавиши и соглашения Visual Basic, что объясняло его непопулярность среди разработчиков C++. Номер версии: 13.00.9466. Visual C++ NET 2003 (также известный как Visual C++ 7.1), включавший MFC 7.1, был выпущен в 2003 году вместе с .NET 1.1 и являлся крупным обновлением Visual C++ NET 2002, а также первой версией, поддерживающей конструкцию C99 "long long". Он рассматривался как исправление для Visual C++ NET 2002. Соответственно, английская версия обновления Visual Studio NET 2003 поставлялась владельцам английской версии Visual Studio NET 2002 по минимальной цене. Windows 98 – минимально поддерживаемая версия. Хотя простые программы будут работать в Windows 95 и NT 4.0, более сложные программы могут вызывать ссылки на такие файлы, как ws2_32.dll, или отсутствие функций в kernel32.dll. В более поздних версиях компилятора (Visual C++ 2005) даже простые программы не будут работать (если не заменить библиотеку C), поскольку они содержат ссылку на функцию IsDebuggerPresent в kernel32.dll, которая существует только в Windows 98 и более поздних версиях. Номер версии: 13.10.3077. eMbedded Visual C++ в различных версиях использовался для разработки некоторых версий операционной системы Windows CE. Первоначально он заменил среду разработки, состоящую из инструментов, добавленных в Visual C++ 6.0. Встроенный Visual C++ был заменен как отдельная среда разработки Microsoft Visual Studio 2005.
Visual C++ NET 2002 (also known as Visual C++ 7.0), which included MFC 7.0, was released in 2002 with support for link time code generation and debugging runtime checks, NET 1.0, and Visual C# and Managed C++. The new user interface used many of the hot keys and conventions of Visual Basic, which accounted for some of its unpopularity among C++ developers. Version number: 13.00.9466
Visual C++ NET 2003 (also known as Visual C++ 7.1), which included MFC 7.1, was released in 2003 along with NET 1.1 and was a major upgrade to Visual C++ NET 2002, and was the first version to support the C99 "long long" construct. It was considered a patch to Visual C++ NET 2002. Accordingly, the English language upgrade version of Visual Studio NET 2003 shipped for minimal cost to owners of the English language version of Visual Studio NET 2002. Windows 98 is the lowest officially supported version. Although simple programs will work on Windows 95 and NT 4.0, more complex programs may cause things like ws2 32. dll to be referenced, or functions missing in kernel32. dll. In later versions (Visual C++ 2005) of the compiler even simple programs won't work (unless you replace the C library) because they have a reference to function IsDebuggerPresent in kernel32. dll which only exists in Windows 98 and later. Version number: 13.10.3077
eMbedded Visual C++ in various versions was used to develop for some versions of the Windows CE operating system. Initially it replaced a development environment consisting of tools added onto Visual C++ 6.0. eMbedded Visual C++ was replaced as a separate development environment by Microsoft Visual Studio 2005.
32-битные и 64-битные версии
Visual C++ 2005 (также известный как Visual C++ 8.0), который включал MFC 8.0, был выпущен в ноябре 2005 года. Эта версия поддерживает .NET 2.0 и включает в себя новую версию C++ ориентированную на платформу .NET Framework (C++/CLI) с целью замены предыдущей версии (Managed C++). Однако управляемый C++ для CLI по-прежнему доступен через параметры компилятора. Он также представил OpenMP. С Visual C++ 2005 Microsoft также представила Team Foundation Server. В Visual C++ 8.0 возникают проблемы с компиляцией проектов MFC AppWizard, созданных с помощью Visual Studio 6.0, поэтому обслуживание устаревших проектов может быть продолжено с использованием исходной IDE, если переписывание не представляется возможным. Visual C++ 2005 является последней версией, способной нацеливаться на Windows 98 и Windows Me. Версия SP1 (14.00.50727.762) также доступна в Microsoft Windows SDK Update для Windows Vista. Visual C++ 2008 (также известный как Visual C++ 9.0) был выпущен в ноябре 2007 года. Эта версия поддерживает .NET 3.5. Управляемый C++ для CLI по-прежнему доступен через параметры компилятора. По умолчанию все приложения, компилированные с использованием библиотек Visual C++ 2008 Runtimes (статической и динамической связью), будут работать только в Windows 2000, Windows XP SP2 и более поздних версиях. Пакет функций, выпущенный для VC9, позже включенный в SP1, добавил поддержку расширений библиотеки C++ TR1. Версия SP1 (15.00.30729.01) также доступна в SDK Microsoft Windows для Windows 7. Некоторые версии Visual C++ поддерживают Itanium 2. Visual C++ 2010 (также известный как Visual C++ 10.0) был выпущен 12 апреля 2010 года. Он использует базу данных SQL Server Compact для хранения информации об исходном коде, включая информацию IntelliSense, для улучшения поддержки IntelliSense и завершения кода. Однако Visual C++ 2010 не поддерживает IntelliSense для C++/CLI. Эта версия добавляет библиотеку параллельных вычислений C++ под названием Parallel Patterns Library, частичную поддержку C++11, значительно улучшенный IntelliSense на основе фронтенда Edison Design Group и улучшения производительности как компилятора, так и генерируемого кода. Эта версия построена на .NET 4.0, но поддерживает компиляцию в машинный код. Частичная поддержка C++11 в основном состоит из шести функций компилятора: лямбда-выражения, ссылки rvalue, auto, decltype, static_assert и nullptr. C++11 также поддерживает функции библиотеки (например, перемещение компонентов TR1 из пространства имен std::tr1 непосредственно в пространство имен std). Различные шаблоны также рассматривались, но были отложены до будущей версии из-за более низкого приоритета, что обусловлено тем, что, в отличие от других дорогостоящих для реализации функций (лямбда-выражения, ссылки rvalue), вариативные шаблоны принесут пользу лишь меньшинству авторов библиотек, а не большинству конечных пользователей компилятора. По умолчанию все приложения, компилированные с использованием Visual C++ 2010 Runtimes, работают только на Windows XP SP2 и более поздних версиях. Версия RTM (16.00.30319) также доступна в Windows SDK для Windows 7 и .NET Framework 4 (WinSDK v7.1). Версия SP1 (16.00.40219) доступна как часть Visual Studio 2010 Service Pack 1 или через Microsoft Visual C++ 2010 Service Pack 1 Compiler Update для Windows SDK 7.1. Visual C++ 2012 (также известный как Visual C++ 11.0) был выпущен 15 августа 2012 года. Он имеет улучшенную поддержку C++11 и поддержку разработки Windows Runtime. Visual C++ 2013 (также известный как Visual C++ 12.0) был выпущен 17 октября 2013 года. Он поддерживает C++11 и C99, а также представляет REST SDK. Visual C++ 2015 (также известный как Visual C++ 14.0) был выпущен 20 июля 2015 года. Он имеет улучшенную поддержку C++11/14/17. Без какого-либо объявления от Microsoft, Visual Studio 2015 Update 2 начал генерировать телеметрические вызовы в скомпилированных двоичных файлах. После того, как некоторые пользователи связались с Microsoft по поводу этой проблемы, Microsoft заявила, что удалит эти телеметрические вызовы при компиляции с будущим Visual Studio 2015 Update 3. Данная функция была удалена из статических библиотек Visual C++ CRT в Visual Studio 2015 Update 3. Visual C++ 2017 (также известный как Visual C++ 14.1) был выпущен 7 марта 2017 года. Visual C++ 2019 (также известный как Visual C++ 14.20) был выпущен 2 апреля 2019 года. Visual C++ 2022 (также известный как Visual C++ 14.30) был выпущен 8 ноября 2021 года.
Внутренний нумерация версии
Существует несколько различных номеров версий, которые следует учитывать при работе с Visual C или C++. Самым старым и оригинальным из них является номер версии компилятора, который монотонно увеличивался с первых дней компилятора Microsoft C. Это версия, возвращаемая при запуске команды cl.exe без каких-либо опций. Получив две цифры после десятичной точки и удалив её, это значение также становится значением макроса препроцессора C: MSC VER и переменной CMake: MSVC VERSION. Более длинная версия макроса C — MSC FULL VER, позволяющая более точно различать сборки компилятора. Например, MSC VER может быть "1933", что соответствует версии 19.33 компилятора Microsoft C/C++, а MSC FULL VER — "193331630". Для проверки значения MSC VER или MSC FULL VER следует использовать оператор >= вместо оператора равенства. Версия продукта Visual, например "17.3.4", указывает версию Visual Studio, в состав которой входила версия 19.33 компилятора. Также существует версия библиотеки Microsoft Visual C/C++ Runtime Library, например "14.3". На основе этой версии можно определить версию набора инструментов, получив первые три цифры версии библиотеки времени выполнения и удалив десятичную точку, например "143". В набор инструментов входят библиотека времени выполнения Visual C/C++, а также компиляторы, компоновщики, ассемблеры, другие инструменты сборки, соответствующие библиотеки и файлы заголовков. Ниже приведена таблица (подлежащая извлечению данных) известных взаимосвязанных номеров версий. + Версии Visual Studio имя продукта VC (Код версии) год выпуска MSC VER MSC FULL VER версия библиотеки времени выполнения Microsoft C 6.0 600 Microsoft C/C++ 7.0 700 Visual C++ 1.0 1.0 800 1 Visual C++ 2.0 2.0 900 2 Visual C++ 4.0 4.0 1000 4 Visual C++ 4.1 4.1 1010 4.1 Visual C++ 4.2 4.2 1020 4.2 Visual Studio 97 [5.0] 5.0 97 1100 5 Visual Studio 6.0 SP5 6.0 1200 12008804 6 Visual Studio 6.0 SP6 6.0 1200 12008804 6 Visual Studio NET 2002 [7.0] 7.0 2002 1300 13009466 7 Visual Studio NET 2003 Beta [7.1] 7.1 2003 1310 13102292 7.1 Visual Studio Toolkit 2003 [7.1] 7.1 2003 1310 13103052 7.1 Visual Studio NET 2003 [7.1] 7.1 2003 1310 13103077 7.1 Visual Studio NET 2003 SP1 [7.1] 7.1 2003 1310 13106030 7.1 Visual Studio 2005 Beta 1 [8.0] 8.0 2005 1400 140040607 8 Visual Studio 2005 Beta 2 [8.0] 8.0 2005 1400 140050215 8 Visual Studio 2005 [8.0] 8.0 2005 1400 140050320 8 Visual Studio 2005 SP1 [8.0] 8.0 2005 1400 140050727 8 Visual Studio 2008 Beta 2 [9.0] 8.0 2008 1500 150020706 9 Visual Studio 2008 [9.0] 9.0 2010 1500 150021022 9 Visual Studio 2008 SP1 [9.0] 9.0 2010 1500 150030729 9 Visual Studio 2010 Beta 1 [10.0] 10.0 2010 1600 160020506 10 Visual Studio 2010 Beta 2 [10.0] 10.0 2010 1600 160021003 10 Visual Studio 2010 [10.0] 10.0 2010 1600 160030319 10 Visual Studio 2010 SP1 [10.0] 10.0 2010 1600 160040219 10 Visual Studio 2012 [11.0] 11.0 2012 1700 170050727 11 Visual Studio 2012 Update 1 [11.0] 11.0 2012 1700 170051106 11 Visual Studio 2012 Update 2 [11.0] 11.0 2012 1700 170060315 11 Visual Studio 2012 Update 3 [11.0] 11.0 2012 1700 170060610 11 Visual Studio 2012 Update 4 [11.0] 11.0 2012 1700 170061030 11 Visual Studio 2012 November CTP [11.0] 11.0 2012 1700 170051025 11 Visual Studio 2013 Preview [12.0] 12.0 2013 1800 180020617 12 Visual Studio 2013 RC [12.0] 12.0 2013 1800 180020827 12 Visual Studio 2013 [12.0] 12.0 2013 1800 180021005 12 Visual Studio 2013 Update 1 [12.0] 12.0 2013 1800 180021005 12 Visual Studio 2013 Update2 RC [12.0] 12.0 2013 1800 180030324 12 Visual Studio 2013 Update 2 [12.0] 12.0 2013 1800 180030501 12 Visual Studio 2013 Update 3 [12.0] 12.0 2013 1800 180030723 12 Visual Studio 2013 Update 4 [12.0] 12.0 2013 1800 180031101 12 Visual Studio 2013 Update 5 [12.0] 12.0 2013 1800 180040629 12 Visual Studio 2013 November CTP [12.0] 12.0 2013 1800 180021114 12 Visual Studio 2015 [14.0] 14.0 2015 1900 190023026 14 Visual Studio 2015 Update 1 [14.0] 14.0 2015 1900 190023506 14 Visual Studio 2015 Update 2 [14.0] 14.0 2015 1900 190023918 14 Visual Studio 2015 Update 3 [14.0] 14.0 2015 1900 190024210 14 Visual Studio 2017 version 15.0 15.0 2017 1910 191025017 14.1 Visual Studio 2017 version 15.1 15.1 2017 1910 191025017 14.1 Visual Studio 2017 version 15.2 15.2 2017 1910 191025017 14.1 Visual Studio 2017 version 15.3.3 15.3.3 2017 1911 191125507 14.11 Visual Studio 2017 version 15.4.4 15.4.4 2017 1911 191125542 14.11 Visual Studio 2017 version 15.4.5 15.4.5 2017 1911 191125547 14.11 Visual Studio 2017 version 15.5.2 15.5.2 2017 1912 191225831 14.12 Visual Studio 2017 version 15.5.3 15.5.3 2017 1912 191225834 14.12 Visual Studio 2017 version 15.5.4 15.5.4 2017 1912 191225834 14.12 Visual Studio 2017 version 15.5.6 15.5.6 2017 1912 191225835 14.12 Visual Studio 2017 version 15.5.7 15.5.7 2017 1912 191225835 14.12 Visual Studio 2017 version 15.6.0 15.6.0 2017 1913 191326128 14.13 Visual Studio 2017 version 15.6.1 15.6.1 2017 1913 191326128 14.13 Visual Studio 2017 version 15.6.2 15.6.2 2017 1913 191326128 14.13 Visual Studio 2017 version 15.6.3 15.6.3 2017 1913 191326129 14.13 Visual Studio 2017 version 15.6.4 15.6.4 2017 1913 191326129 14.13 Visual Studio 2017 version 15.6.6 15.6.6 2017 1913 191326131 14.13 Visual Studio 2017 version 15.6.7 15.6.7 2017 1913 191326132 14.13 Visual Studio 2017 version 15.7.1 15.7.1 2017 1914 191426428 14.14 Visual Studio 2017 version 15.7.2 15.7.2 2017 1914 191426429 14.14 Visual Studio 2017 version 15.7.3 15.7.3 2017 1914 191426430 14.14 Visual Studio 2017 version 15.7.5 15.7.5 2017 1914 191426433 14.14 Visual Studio 2017 version 15.9.1 15.9.1 2017 1916 191627023 14.16 Visual Studio 2017 version 15.9.4 15.9.4 2017 1916 191627025 14.16 Visual Studio 2017 version 15.9.5 15.9.5 2017 1916 191627026 14.16 Visual Studio 2017 version 15.9.7 15.9.7 2017 1916 191627027 14.16 Visual Studio 2017 version 15.9.11 15.9.11 2017 1916 191627030 14.16 Visual Studio 2019 version 16.0.0 16.0.0 2019 1920 192027508 14.20 Visual Studio 2019 version 16.1.2 16.1.2 2019 1921 192127702 14.21 Visual Studio 2019 version 16.2.3 16.2.3 2019 1922 192227905 14.21 Visual Studio 2019 version 16.3.2 16.3.2 2019 1923 192328105 14.21 Visual Studio 2019 version 16.4.0 16.4.0 2019 1924 192428314 14.24 Visual Studio 2019 version 16.5.1 16.5.1 2019 1925 192528611 14.25 Visual Studio 2019 version 16.6.2 16.6.2 2019 1926 192628806 14.26 Visual Studio 2019 version 16.7 16.7 2019 1927 192729112 14.27 Visual Studio 2019 version 16.8.1 16.8.1 2019 1928 192829333 14.28 Visual Studio 2019 version 16.8.2 16.8.2 2019 1928 192829334 14.28 Visual Studio 2019 version 16.9.0 16.9.0 2019 1928 192829910 14.28 Visual Studio 2019 version 16.9.2 16.9.2 2019 1928 192829913 14.28 Visual Studio 2019 version 16.9.17 16.9.17 2019 1928 192829921 14.28 Visual Studio 2019 version 16.9.18 16.9.18 2019 1928 192829921 14.28 Visual Studio 2019 version 16.9.19 16.9.19 2019 1928 192829923 14.28 Visual Studio 2019 version 16.11.2 16.11.2 2019 1929 192930133 14.29 Visual Studio 2019 version 16.11.8 16.11.8 2019 1929 192930138 14.29 Visual Studio 2019 version 16.11.9 16.11.9 2019 1929 192930139 14.29 Visual Studio 2019 version 16.11.10 16.11.10 2019 1929 192930140 14.29 Visual Studio 2019 version 16.11.11 16.11.11 2019 1929 192930141 14.29 Visual Studio 2019 version 16.11.12 16.11.12 2019 1929 192930142 14.29 Visual Studio 2019 version 16.11.16 16.11.16 2019 1929 192930145 14.29 Visual Studio 2019 version 16.11.24 16.11.24 2019 1929 192930148 14.29 Visual Studio 2019 version 16.11.27 16.11.27 2019 1929 192930151 14.29 Visual Studio 2019 version 16.11.35 16.11.35 2019 1929 192930154 14.29 Visual Studio 2022 version 17.0.1 17.0.1 2022 1930 1...
АБИ
Компилятор Visual C++ ABI исторически изменялся между основными выпусками компилятора. Это особенно касается контейнеров STL, размеры которых значительно различались между выпусками компилятора. Поэтому Microsoft не рекомендует использовать интерфейсы C++ на границах модулей, если требуется включить клиентский код, скомпилированный с использованием другой версии компилятора. Вместо C++ Microsoft рекомендует использовать интерфейсы C или COM, которые разработаны для обеспечения стабильного ABI между выпусками компилятора. Все версии MSVC 14.x имеют стабильный ABI, и бинарные файлы, созданные с использованием этих версий, могут быть смешаны с обеспечением обратной совместимости, с учетом следующих ограничений: версия используемого набора инструментов должна быть равной или выше самой высокой версии набора инструментов, использованной для сборки любых связанных бинарных файлов. Версия MSVC Redistributable должна быть равной или выше версии набора инструментов, используемой любым компонентом приложения. Статические библиотеки или объектные файлы, скомпилированные с /GL (оптимизация всей программы), не являются бинарно совместимыми между версиями и должны использовать точно такой же набор инструментов.
The toolset version used must be equal to or higher than the highest toolset version used to build any linked binaries. The MSVC Redistributable version must be equal to or higher than the toolset version used by any application component. Static libraries or object files compiled with /GL (Whole program optimisation) are not binary compatible between versions and must use the exact same toolset.
C-библиотеки времени выполнения
Visual C++ поставляется с различными версиями библиотек времени выполнения C. Это означает, что пользователи могут компилировать свой код с использованием любой из доступных библиотек. Однако это может привести к проблемам при использовании различных компонентов (DLL, EXE) в одной программе. Типичный пример – программа, использующая разные библиотеки времени выполнения. Пользователю следует использовать одну и ту же библиотеку времени выполнения C для всех компонентов программы, если он не понимает последствий. Microsoft рекомендует использовать многопоточную динамическую библиотеку (/MD или /MDd – опции компилятора), чтобы избежать возможных проблем. Однако системы, действительно соответствующие стандарту POSIX, не примут эти имена с подчеркиванием, и более переносимым решением будет просто отключить предупреждение.
C++
При настройках по умолчанию MSVC не выполняет поиск имён в два этапа, что не позволяет ему выявлять широкий спектр некорректного кода. Большинство проверок откладываются до момента инстанцирования шаблона. В более новых версиях эта проблема устранена, но для этого необходимо включить опцию командной строки /permissive.