stringtranslate.com

Microsoft Visual C++

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_VER1933 представляет версию 19.33 компилятора Microsoft C/C++, а _MSC_FULL_VER193331630.

Версия продукта Visual, например "17.3.4", обозначает версию Visual Studio, с которой была упакована версия 19.33 компилятора. Затем идет версия Microsoft Visual C/C++ Runtime Library, например "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 Run-Time для всех компонентов программы, если последствия не понятны. Microsoft рекомендует использовать многопоточную библиотеку динамической компоновки (опция компилятора /MD или /MDd), чтобы избежать возможных проблем. [59]

POSIX

Хотя 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 есть в нашей дорожной карте, и обновление препроцессора — это только первый шаг в этом процессе. _GenericФункция C11 на самом деле не является частью препроцессора, поэтому она еще не реализована. После реализации я ожидаю, что функция будет работать независимо от того, используется ли традиционная или обновленная логика препроцессора.

_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]

Прием

Описывая его как «превосходный», BYTE в феврале 1989 года одобрил поддержку OS/2 в Microsoft C 5.1, QuickC для интерактивной разработки и отладчик CodeView. Хотя Watcom C производил немного более быстрый код, журнал заявил, что разработчики «все равно могут предпочесть более дружественные и мощные инструменты Microsoft». [74]

Ссылки

  1. ^ ab "Visual C++ добавляет поддержку Windows". InfoWorld . 22 февраля 1993 г. стр. 17.
  2. ^ Lextrait, Vincent (январь 2010 г.). "The Programming Languages ​​Beacon, v10.0". Архивировано из оригинала 30 мая 2012 г. Получено 14 марта 2010 г.
  3. ^ «Нужны ли мне эти распространяемые пакеты Microsoft Visual C++?». Спросите Лео!. Получено 18.11.2012.
  4. ^ Computer Language - Выпуск 06 (1985-02) (CL Publications) (США). Февраль 1985 г.
  5. ^ Лейбсон, Стив (1985-02-01). "Обзоры программного обеспечения: группа экспертов анализирует 21 компилятор C". Computer Language . Получено 2020-06-05 .
  6. Лэдд, Скотт Роберт (1 августа 1990 г.). «Оптимизация с помощью Microsoft C 6.0».
  7. ^ Майерс, Бен (1992-07-01). "Microsoft C/C++". PC Magazine . Ziff Davis . стр. 387. Получено 21 декабря 2023 г.
  8. ^ "Анонсирован выпуск новостей/программного обеспечения". InfoWorld . InfoWorld Media Group. 1993-03-15 . Получено 2023-12-21 .
  9. ^ Получено с http://support.microsoft.com/kb/196831.
  10. ^ ab "Visual C++ — мощный инструмент разработки". InfoWorld . 21 июня 1993 г., стр. 94.
  11. ^ "Дебют конкурентных DOS-расширителей на выставке". InfoWorld . 1 марта 1993 г. стр. 18.
  12. ^ "Visual C++ 1.5 интегрирует OLE, ODBC". InfoWorld . 8 ноября 1993 г. стр. 5.
  13. ^ "Microsoft готовится выпустить предварительный релиз 32-битной версии Visual C++". InfoWorld . 19 июля 1993 г. стр. 12.
  14. ^ "Среды разработки C++ развиваются". InfoWorld . 4 апреля 1994 г. стр. 79.
  15. ^ «Стратегия Microsoft Visual C++».
  16. ^ ab Калленс, Чейн; Блэквелл, Кен (1995). Кроссплатформенная разработка с использованием Visual C++. Книги M&T. ISBN 1-55851-428-7. Получено 27 января 2024 г. .
  17. ^ Пламондон, Джеймс (9 октября 1997 г.). "Generalized Evangelism Timeline" (PDF) . Корпорация Microsoft. Архивировано из оригинала (PDF) 2007-02-02 . Получено 27 января 2024 г.
  18. ^ ab "Устаревшие продукты". Архивировано из оригинала 2005-08-14.
  19. ^ Тот, Виктор (1996). "1". Visual C++ 4.0 вышел в свет. Индианаполис: SAMS Publishing . ISBN 9780672308741. Получено 26 июля 2013 г.
  20. ^ «История Visual Studio (часть 3)». 6 августа 2021 г.
  21. ^ "Major Changes from Visual C++ 4.0 to 4.2". Архивировано из оригинала 2010-02-28 . Получено 2018-04-18 .
  22. ^ «Основные изменения от Visual C++ 4.2 до 5.0».
  23. ^ "Microsoft Visual C++ 5.0 Learning Edition". Microsoft . Архивировано из оригинала 27 апреля 1999 г.
  24. ^ "Microsoft Visual C++ 5.0 Professional Edition". Microsoft . Архивировано из оригинала 27 апреля 1999 года.
  25. ^ "Microsoft Visual C++ 5.0 Enterprise Edition". Microsoft . Архивировано из оригинала 17 апреля 1999 года.
  26. ^ "Microsoft Visual C++ 5.0 RISC Edition". Microsoft . Архивировано из оригинала 29 апреля 1999 г.
  27. ^ Шилдс, Натан П. (8 июня 2018 г.). «Уголовная жалоба». Министерство юстиции США . стр. 128. Это само по себе не является диспозитивной ссылкой, поскольку Visual C++ 6.0, выпущенный в 1998 г., по-прежнему имеет сторонников, в основном потому, что для его работы не требуется установка .NET Framework от Microsoft, как это делают более поздние версии 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 Developer Network . Microsoft. 29 ноября 2012 г. Получено 20 сентября 2015 г.
  44. ^ "Что нового для Visual C++ в Visual Studio 2013". Microsoft Developer Network . Microsoft. 28 апреля 2015 г. Получено 20 сентября 2015 г.
  45. ^ Эрик Батталио (20 июля 2015 г.). "Visual Studio 2015 RTM уже доступна". Блог команды Visual C++ . Microsoft.
  46. ^ Стефан Т. Лававей (19 июня 2015 г.). "C++11/14/17 Features In VS 2015 RTM". Блог команды Visual C++ . Microsoft.
  47. ^ Обзор автоматической вставки телеметрии в двоичные файлы C++ от Microsoft
  48. ^ "Visual Studio добавляет вызовы функций телеметрии в двоичный файл? • /r/cpp". reddit . 7 мая 2016 г. Получено 17 августа 2016 г.
  49. ^ Джулия Лиусон (7 марта 2017 г.). «Объявление о выпуске Visual Studio 2017 General Availability… и многое другое». Блог команды Visual Studio . Microsoft.
  50. ^ Аманда Сильвер (14 февраля 2019 г.). «Присоединяйтесь к нам 2 апреля на запуске Visual Studio 2019!». Блог команды Visual Studio . Microsoft.
  51. ^ Аманда Сильвер (8 ноября 2021 г.). "Visual Studio 2022 уже доступна". Блог команды Visual Studio . Microsoft.
  52. ^ "Предопределенные макросы компилятора / Wiki / Компиляторы". dev.to . 22 мая 2018 . Получено 2023-02-20 .
  53. ^ "Предопределенные макросы / Microsoft Learn". learn.microsoft.com . 8 августа 2022 г. Получено 26.05.2023 .
  54. ^ Microsoft MSDN: Критические изменения в Visual C++
  55. ^ Microsoft MSDN: Контейнеры (современный C++)
  56. ^ Microsoft MSDN: Переносимость на границах ABI (современный C++)
  57. ^ Форум Microsoft: Двоичная совместимость между версиями Visual C++ Архивировано 16.02.2013 на archive.today
  58. ^ docs.microsoft.com: Двоичная совместимость C++ между Visual Studio 2015, 2017 и 2019
  59. ^ ab Библиотеки времени выполнения C
  60. ^ "Совместимость". Microsoft: Возможности библиотеки CRT . 26 октября 2022 г.
  61. ^ "Поддержка C99". Microsoft Connect . Архивировано из оригинала 2016-03-04 . Получено 2015-09-21 .
  62. ^ "Что нового для Visual C++ в Visual Studio 2013". Microsoft Developer Network . Microsoft. 28 апреля 2015 г.
  63. ^ Пэт Бреннер (19 июля 2013 г.). "Поддержка библиотеки C99 в Visual Studio 2013". Блог команды Visual C++ . Microsoft.
  64. ^ "Что нового для Visual C++ в Visual Studio 2015". Microsoft Developer Network . Microsoft. 3 января 2018 г.
  65. ^ "Пошаговое руководство: Компиляция программы на языке C в командной строке". Документация Visual C++ . Microsoft. 10 мая 2022 г.
  66. ^ «MSVC 2017 не поддерживает _Generic (тип универсальных макросов) в C».
  67. ^ Luvsanbat, Bat-Ulzii (6 июля 2018 г.). "MSVC Preprocessor Progress towards Conformance". Блог команды Visual Studio . Microsoft. Архивировано из оригинала 3 марта 2024 г.
  68. ^ "C++20 Features and Fixes". reddit . 3 июля 2020 г.
  69. ^ "Поддержка стандартов C11 и C17 появится в MSVC". 14 сентября 2020 г.
  70. ^ "C11 Atomics в Visual Studio 2022 версии 17.5 Preview 2". 13.12.2022.
  71. ^ "Потоки C11 в Visual Studio 2022 версии 17.8 Preview 2". 2023-09-26.
  72. ^ Мерфи, Адриан (14.11.2023). "Visual Studio 17.8 уже доступна!". Блог Visual Studio . Получено 12.01.2024 .
  73. ^ "Поддержка двухфазного поиска имени появилась в MSVC". 2017-09-11.
  74. ^ Апики, Стивен; Уделл, Джон (февраль 1989). «Сглаживание C». BYTE . стр. 170–186 . Получено 08.10.2024 .

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

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