stringtranslate.com

Microsoft Visual С++

Microsoft Visual C++ ( MSVC ) — компилятор языков программирования C , C++ , C++/CLI и C++/CX от Microsoft . MSVC является проприетарным программным обеспечением ; Первоначально это был отдельный продукт, но позже он стал частью Visual Studio и стал доступен как в пробной , так и в бесплатной форме. Он содержит инструменты для разработки и отладки кода C++, особенно кода, написанного для Windows API , DirectX и .NET .

Для правильной работы многих приложений требуются распространяемые пакеты библиотеки времени выполнения Visual C++. Эти пакеты часто устанавливаются отдельно от поддерживаемых ими приложений, что позволяет нескольким приложениям использовать пакет при одной установке. Эти распространяемые пакеты и пакеты среды выполнения Visual C++ в основном устанавливаются для стандартных библиотек , которые используют многие приложения. [3]

История

Предшественник 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-битные версии

Строго 32-битные версии

32-битные и 64-битные версии

Внутренняя нумерация версий

При работе с 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++, например «14.3». Отсюда также можно вывести версию набора инструментов, которую можно получить, взяв первые три цифры версии библиотеки времени выполнения и отбросив десятичную дробь, например «143». Он включает в себя библиотеку времени выполнения Visual C/C++, а также компиляторы, компоновщики, ассемблеры, другие инструменты сборки, а также соответствующие библиотеки и файлы заголовков. Ниже приводится (очищаемая) таблица известных коррелированных номеров версий.

Совместимость

АБИ

ABI компилятора Visual C++ исторически менялся в зависимости от основных выпусков компилятора. [54] Это особенно актуально для контейнеров STL, размеры которых сильно различаются в зависимости от версии компилятора. [55] Поэтому Microsoft рекомендует не использовать интерфейсы C++ на границах модулей, если кто-то хочет включить клиентский код, скомпилированный с использованием другой версии компилятора. Вместо C++ Microsoft рекомендует использовать интерфейсы C [56] или COM [57] , которые предназначены для обеспечения стабильного ABI между выпусками компилятора.

Все выпуски MSVC 14.x имеют стабильный ABI [58] , и двоичные файлы, созданные с помощью этих версий, можно смешивать с прямой совместимостью, учитывая следующие ограничения:

Библиотеки времени выполнения C

Visual C++ поставляется с различными версиями библиотек времени выполнения C. [59] Это означает, что пользователи могут компилировать свой код с помощью любой из доступных библиотек. Однако это может вызвать некоторые проблемы при использовании разных компонентов ( DLL , EXE ) в одной программе. Типичный пример — программа, использующая разные библиотеки . Пользователь должен использовать одну и ту же среду выполнения C для всех компонентов программы, если не понятны последствия. Microsoft рекомендует использовать многопоточную библиотеку динамической компоновки (параметр компилятора /MD или /MDd), чтобы избежать возможных проблем. [59]

ПОСИКС

Хотя CRT от Microsoft реализует большое подмножество интерфейсов POSIX , компилятор Visual C++ по умолчанию выдает предупреждение при каждом использовании таких функций. Причина в том, что стандарты C и C++ требуют префикса подчеркивания перед интерфейсами, определяемыми реализацией, поэтому использование этих функций нестандартно. [60] Однако системы, которые на самом деле POSIX-совместимы, не будут принимать эти подчеркнутые имена, и вместо этого более портативно просто отключить предупреждение.

С

Хотя продукт возник как IDE для языка программирования C , в течение многих лет поддержка этого языка компилятором соответствовала только исходной редакции стандарта C , датируемой 1989 годом, но не версии стандарта C99 . Планов по поддержке C99 не было даже в 2011 году, спустя более десяти лет после его публикации. [61]

В Visual C++ 2013 наконец-то добавлена ​​поддержка различных функций C99 в режиме C (включая назначенные инициализаторы, составные литералы и типы _Bool), [62] , хотя она еще не была завершена. [63] Visual C++ 2015 дополнительно улучшил поддержку C99 за счет полной поддержки стандартной библиотеки C99, за исключением функций, для которых требуются функции языка C99, еще не поддерживаемые компилятором. [64]

Большинство изменений по сравнению с версией стандарта C11 по-прежнему не поддерживались Visual C++ 2017. [65] Например, общий выбор с помощью _Genericключевого слова не поддерживается компилятором и приводит к синтаксической ошибке. [66]

Препроцессор был капитально отремонтирован в 2018 году, и на горизонте появился C11: [67]

Полное соответствие C11 запланировано на нашем плане, и обновление препроцессора — лишь первый шаг в этом процессе. Функция C11 _Genericна самом деле не является частью препроцессора, поэтому она еще не реализована. Я ожидаю, что после реализации эта функция будет работать независимо от того, используется ли традиционная или обновленная логика препроцессора.

_Genericподдержка MSVC была обеспечена по состоянию на февраль 2020 года. [68]

В сентябре 2020 года Microsoft объявила, что поддержка стандартов C11 и C17 в MSVC появится в версии 16.8. [69] Сюда не вошли дополнительные функции, но Microsoft указала, что планирует добавить поддержку атомарности и потоков позднее. В версии 17.5 была добавлена ​​частичная (поскольку атомные блокировки отсутствуют) и экспериментальная (то есть скрытая за флагом компилятора /experimental:c11atomics) поддержка атомов [70] , а в версии 17.8 была добавлена ​​поддержка потоков, на этот раз не за флагом компилятора. [71] [72]

С++

При настройках по умолчанию MSVC не выполняет двухфазный поиск имени, что не позволяет ему помечать широкий спектр недопустимого кода. Большинство проверок откладываются до создания экземпляра шаблона. Более поздние версии исправляют это поведение, но его необходимо включить с помощью параметра командной строки /permissive-. [73]

Рекомендации

  1. ^ ab «Visual C++ добавляет поддержку Windows». Инфомир . 22 февраля 1993 г. с. 17.
  2. ^ Лекстрайт, Винсент (январь 2010 г.). «Маяк языков программирования, v10.0». Архивировано из оригинала 30 мая 2012 года . Проверено 14 марта 2010 г.
  3. ^ «Нужны ли мне эти распространяемые файлы Microsoft Visual C++?». Спроси Лео! Проверено 18 ноября 2012 г.
  4. ^ Компьютерный язык - выпуск 06 (1985-02) (CL Publications) (США). Февраль 1985 года.
  5. ^ Лейбсон, Стив (1 февраля 1985 г.). «Обзоры программного обеспечения: группа экспертов анализирует 21 компилятор C». Компьютерный язык . Проверено 5 июня 2020 г.
  6. Лэдд, Скотт Роберт (1 августа 1990 г.). «Оптимизация с помощью Microsoft C 6.0».
  7. ^ Майерс, Бен (1 июля 1992 г.). «Майкрософт С/С++». Журнал ПК . Зифф Дэвис . п. 387 . Проверено 21 декабря 2023 г.
  8. ^ «Анонсирован канал новостей/программного обеспечения» . Инфомир . Медиа-группа InfoWorld. 15 марта 1993 г. Проверено 21 декабря 2023 г.
  9. ^ Получено с http://support.microsoft.com/kb/196831.
  10. ^ ab «Visual C++ — мощный инструмент разработки». Инфомир . 21 июня 1993 г. с. 94.
  11. ^ "Дебют конкурирующих расширителей DOS" . Инфомир . 1 марта 1993 г. с. 18.
  12. ^ «Visual C++ 1.5 интегрирует OLE, ODBC» . Инфомир . 8 ноября 1993 г. с. 5.
  13. ^ «Microsoft собирается выпустить предварительную версию 32-разрядной версии Visual C++» . Инфомир . 19 июля 1993 г. с. 12.
  14. ^ «IDE C++ развиваются». Инфомир . 4 апреля 1994 г. с. 79.
  15. ^ «Стратегия Microsoft Visual C++».
  16. ^ Аб Калленс, Чейн; Блэквелл, Кен (1995). Кроссплатформенная разработка с использованием Visual C++. Книги М&Т. ISBN 1-55851-428-7. Проверено 27 января 2024 г.
  17. Пламондон, Джеймс (9 октября 1997 г.). «Хронология всеобщей евангелизации» (PDF) . Корпорация Майкрософт . Проверено 27 января 2024 г.
  18. ^ ab «Устаревшие продукты». Архивировано из оригинала 14 августа 2005 г.
  19. ^ Тот, Виктор (1996). «1». Выпущен Visual C++ 4.0. Индианаполис: Издательство SAMS . ISBN 9780672308741. Проверено 26 июля 2013 г.
  20. ^ «История Visual Studio (часть 3)» . 6 августа 2021 г.
  21. ^ «Основные изменения в Visual C++ 4.0–4.2». Архивировано из оригинала 28 февраля 2010 г. Проверено 18 апреля 2018 г.
  22. ^ «Основные изменения в Visual C++ 4.2–5.0».
  23. ^ «Microsoft Visual C++ 5.0 Learning Edition» . Майкрософт . Архивировано из оригинала 27 апреля 1999 года.
  24. ^ «Microsoft Visual C++ 5.0 Professional Edition» . Майкрософт . Архивировано из оригинала 27 апреля 1999 года.
  25. ^ «Microsoft Visual C++ 5.0 Enterprise Edition» . Майкрософт . Архивировано из оригинала 17 апреля 1999 года.
  26. ^ «Microsoft Visual C++ 5.0 RISC Edition» . Майкрософт . Архивировано из оригинала 29 апреля 1999 года.
  27. Шилдс, Натан П. (8 июня 2018 г.). «Уголовное заявление». Министерство юстиции США . п. 128. Это само по себе не является диспозитивной ссылкой, поскольку Visual C++ 6.0, выпущенный в 1998 году, до сих пор имеет сторонников, главным образом потому, что для его запуска не требуется установка платформы Microsoft .NET, как это делают более поздние версии Visual C++.
  28. ^ «Основные изменения в Visual C++ 5.0–6.0». Архивировано из оригинала 14 сентября 2008 года.
  29. ^ На этой странице подчеркивается, что пользователи также должны использовать Windows 98, Windows NT 4.0 или Windows 2000. Получено с http://msdn2.microsoft.com/en-us/vstudio/aa718349.aspx.
  30. ^ Дуглас Болинг: Программирование Microsoft Windows CE .NET, третье издание Microsoft Press; 3-е издание (25 июня 2003 г.) Мягкая обложка: 1264 страницы ISBN 978-0735618848 — сопутствующий компакт-диск с Microsoft eMbedded Visual C++ 4.0 Service Pack 2. Архивировано 11 февраля 2013 г. в archive.today. 
  31. ^ Как: изменить WINVER и _WIN32_WINNT.
  32. ^ Критические изменения
  33. ^ Платформы Windows (CRT)
  34. ^ «Главные изменения Visual C++ 2008» . 25 мая 2023 г.
  35. ^ Блог группы Visual C++. «IntelliSense, часть 2: Будущее» . Проверено 12 марта 2008 г.
  36. ^ «Почему IntelliSense не поддерживается для C++/CLI в Visual Studio 2010» . Проверено 13 марта 2011 г.
  37. ^ Блог группы Visual C++ (27 мая 2009 г.). «Восстановление Intellisense».
  38. ^ Блог группы Visual C++. «Генерация кода Visual C++ в Visual Studio 2010».
  39. ^ «Основные возможности языка C++0x в VC10: Таблица» .
  40. ^ «Стефан Т. Лавей: Все, что вы когда-либо хотели знать о nullptr» .
  41. ^ Блог Microsoft Windows SDK. «Выпущено: Windows SDK для Windows 7 и .NET Framework 4».
  42. ^ ИСПРАВЛЕНИЕ: компиляторы Visual C++ удаляются при обновлении Visual Studio 2010 Professional или Visual Studio 2010 Express до Visual Studio 2010 SP1, если установлен Windows SDK v7.1.
  43. ^ «Что нового в Visual C++ в Visual Studio 2012» . Сеть разработчиков Microsoft . Майкрософт. 29 ноября 2012 года . Проверено 20 сентября 2015 г.
  44. ^ «Что нового в Visual C++ в Visual Studio 2013» . Сеть разработчиков Microsoft . Майкрософт. 28 апреля 2015 года . Проверено 20 сентября 2015 г.
  45. Эрик Батталио (20 июля 2015 г.). «Visual Studio 2015 RTM уже доступна» . Блог группы Visual C++ . Майкрософт.
  46. ^ Стефан Т. Лававей (19 июня 2015 г.). «Функции C++ 14.11.17 в VS 2015 RTM». Блог группы Visual C++ . Майкрософт.
  47. ^ Обзор автоматической вставки телеметрии Microsoft в двоичные файлы C++
  48. ^ «Visual Studio добавляет вызовы функций телеметрии в двоичный файл? • /r/cpp» . реддит . 7 мая 2016 года . Проверено 17 августа 2016 г.
  49. Юлия Люсон (7 марта 2017 г.). «Объявление об общедоступной версии Visual Studio 2017… и многое другое». Блог группы Visual Studio . Майкрософт.
  50. Аманда Сильвер (14 февраля 2019 г.). «Присоединяйтесь к нам 2 апреля на презентации Visual Studio 2019!». Блог группы Visual Studio . Майкрософт.
  51. Аманда Сильвер (8 ноября 2021 г.). «Visual Studio 2022 уже доступна». Блог группы Visual Studio . Майкрософт.
  52. ^ «Предварительно определенные макросы компилятора / Wiki / Компиляторы» . dev.to. _ 22 мая 2018 года . Проверено 20 февраля 2023 г.
  53. ^ «Предопределенные макросы / Microsoft Learn». Learn.microsoft.com . 8 августа 2022 г. Проверено 26 мая 2023 г.
  54. ^ Microsoft MSDN: Критические изменения в Visual C++
  55. ^ Microsoft MSDN: Контейнеры (современный C++)
  56. ^ Microsoft MSDN: переносимость в границах ABI (современный C++)
  57. ^ Форум Microsoft: Двоичная совместимость версий Visual C++. Архивировано 16 февраля 2013 г. на archive.today.
  58. ^ docs.microsoft.com: двоичная совместимость C++ между Visual Studio 2015, 2017 и 2019.
  59. ^ ab C Библиотеки времени выполнения
  60. ^ «Совместимость». Microsoft: возможности библиотеки CRT . 26 октября 2022 г.
  61. ^ «Поддержка C99» . Майкрософт Коннект . Архивировано из оригинала 4 марта 2016 г. Проверено 21 сентября 2015 г.
  62. ^ «Что нового в Visual C++ в Visual Studio 2013» . Сеть разработчиков Microsoft . Майкрософт. 28 апреля 2015 г.
  63. Пэт Бреннер (19 июля 2013 г.). «Поддержка библиотеки C99 в Visual Studio 2013». Блог группы Visual C++ . Майкрософт.
  64. ^ «Что нового в Visual C++ в Visual Studio 2015» . Сеть разработчиков Microsoft . Майкрософт. 3 января 2018 г.
  65. ^ «Пошаговое руководство: скомпилируйте программу C в командной строке». Документация по Visual C++ . Майкрософт. 10 мая 2022 г.
  66. ^ «MSVC 2017 не поддерживает _Generic (универсальные макросы типов) в C» .
  67. Лувсанбат, Бат-Улзий (6 июля 2018 г.). «Прогресс препроцессора MSVC в направлении соответствия». Сеть разработчиков Microsoft . Архивировано из оригинала 8 января 2019 года.
  68. ^ «Функции и исправления C++20». реддит . 3 июля 2020 г.
  69. ^ «Стандартная поддержка C11 и C17 поступает в MSVC» . 14 сентября 2020 г.
  70. ^ «C11 Atomics в Visual Studio 2022 версии 17.5, предварительная версия 2» . 2022-12-13.
  71. ^ «Потоки C11 в Visual Studio 2022 версии 17.8, предварительная версия 2» . 26 сентября 2023 г.
  72. ^ Мерфи, Адриан (14 ноября 2023 г.). «Visual Studio 17.8 теперь доступна!». Блог Visual Studio . Проверено 12 января 2024 г.
  73. ^ «В MSVC появилась поддержка двухфазного поиска имени» . 11 сентября 2017 г.

дальнейшее чтение

Внешние ссылки