Средства интегрированной среды разработки Visual Studio для обновления кода C++
Visual Studio помогает обновить устаревший код C++ с параметрами компилятора, предупреждениями анализа кода и функциями редактора, такими как быстрые исправления, быстрые сведения и расширенная полоса прокрутки. Термин "устаревший код" относится к любой из следующих категорий:
Код, который ранее был разрешен компилятором Microsoft C++ (MSVC), но никогда не соответствовал стандарту C++.
Чтобы обновить старый несоответствующий код MSVC, включите параметр компилятора
/permissive-
. Все экземпляры несоответствующих использования подчеркнуты красными волнистыми цветами в редакторе кода. Сообщения об ошибках в окне списка ошибок содержат рекомендацию по устранению ошибки. Щелкните код ошибки, чтобы перейти на страницу справки в документации. Если исправление всех ошибок одновременно нецелесообразно, вы можете обновить несоответствующий код на этапах, включив/permissive-
этот параметр, исправив некоторые ошибки, а затем снова отключить этот параметр. Код будет компилироваться с новыми улучшениями, и вы можете вернуться и устранить оставшиеся проблемы позже. См./permissive-
страницу примеров несоответствующего кода MSVC.Код, разрешенный в более ранней версии стандарта C++, но нерекомендуемый или удаленный в более поздней версии.
Чтобы обновить более новый языковой стандарт, задайте для параметра "Стандартный" язык C++ нужный стандарт и исправьте все возникающие ошибки компиляции. Как правило, мы рекомендуем задать стандарт языка для
/std:c++17
или/std:c++20
. Ошибки, возникающие при обновлении до более нового стандарта, не связаны с ошибками, возникающими при использовании/permissive-
параметра.Код, соответствующий всем версиям стандарта, но больше не считается лучшей практикой в современном C++.
Чтобы определить код, в котором рекомендуется вносить изменения, выполните анализ кода.
Открытие и преобразование устаревшего проекта
Если устаревший проект основан на старой версии Visual Studio, его можно открыть в Visual Studio 2017 или Visual Studio 2019. Visual Studio автоматически преобразует его в текущую схему проекта с поддержкой всех последних функций компилятора и интегрированной среды разработки.
Дополнительные сведения см. в статье Об обновлении проектов C++ из более ранних версий Visual Studio.
Поиск в базе кода
Обновление базы кода часто включает поиск по нескольким файлам. Чтобы найти что-либо в базе кода, нажмите клавиши CTRL+T , чтобы открыть поле поиска "Перейти ко всем ".
Чтобы сузить область поиска, введите один из 1-буквных фильтров, а затем пробел, который вы ищете.
Список ошибок
После задания требуемого стандарта языка C++ и любых других параметров компилятора (общие свойства>проекта>) нажмите клавиши CTRL+SHIFT+B, чтобы скомпилировать проект. Вы можете увидеть некоторые ошибки и предупреждения в виде красных волнистых волн в различных местах в коде. Ошибки также отображаются в списке ошибок. Дополнительные сведения об определенной ошибке щелкните код ошибки, чтобы перейти на страницу справки в документации. Коды ошибок, начинающиеся с "C", являются ошибками компилятора. Коды, начинающиеся с MSB, — это ошибки MSBuild, которые указывают на проблему с конфигурацией проекта.
Индикатор работоспособности документа
Индикатор работоспособности документа в нижней части редактора показывает количество ошибок и предупреждений в текущем документе и позволяет перейти непосредственно от одного предупреждения или ошибки к следующему.
Во многих случаях можно найти дополнительные сведения об определенной ошибке в документации по журналу изменений и улучшению соответствия Visual Studio.
- Улучшения соответствия C++
- Журнал изменений Visual C++ 2003 — 2015
- Общие сведения о возможных проблемах, возникающих при обновлении
Использование анализа кода для модернизации кода
При обновлении рекомендуется выполнить анализ кода в проекте, чтобы код соответствовал минимальным рекомендациям Майкрософт. Эти правила являются сочетанием правил, определенных корпорацией Майкрософт, и подмножеством основных рекомендаций C++ . Соблюдая эти возможности, вы значительно уменьшите или исключите распространенные источники ошибок, и в то же время сделает код более читаемым и, следовательно, проще поддерживать. Анализ кода с помощью рекомендуемых правил Майкрософт включен по умолчанию. Дополнительные правила можно включить в разделе "Анализ кода свойств>проекта".> Код, который нарушает одно из правил, помечается как предупреждение и подчеркивается зеленым волнистой линией в редакторе кода. Наведите указатель мыши на волнистую подсказку QuickInfo , описывающую проблему.
Щелкните значок фильтра в столбце "Код ", чтобы выбрать, какие предупреждения отображаются.
Ошибки анализа кода и предупреждения также отображаются в списке ошибок компилятора, как и в списке ошибок компилятора.
Вы можете изменить активные правила и создать настраиваемые наборы правил. Дополнительные сведения об использовании анализа кода см. в разделе "Анализ кода" для C/C++.
Использование быстрых действий для модернизации кода
Редактор кода предоставляет краткие действия для некоторых распространенных рекомендаций. Когда отображается значок лампочки, щелкните его, чтобы просмотреть доступные быстрые действия.
Преобразование макросов в функции constexpr
На следующем рисунке показано использование макроса AVERAGE
, который имеет семантику цветов по умолчанию. На изображении также показана подсказка QuickInfo, отображаемая при наведении курсора мыши на него:
Поскольку использование макросов не рекомендуется в современном C++, Visual Studio упрощает преобразование макросов в constexpr
функции:
Щелкните правой кнопкой мыши
AVERAGE
и выберите "Перейти к определению".Щелкните значок отвертки и выберите "Преобразовать макрос в constexpr"
Макрос преобразуется, как показано ниже:
И вызов AVERAGE
теперь цветен в виде вызова функции, а подсказка "Быстрая информация" показывает выводимый тип функции:
Инициализация переменных
Неинициализированные переменные могут содержать случайные значения, которые приводят к серьезным ошибкам. Анализ кода помечает эти экземпляры, а редактор предоставляет быстрое действие:
Преобразование в необработанный строковый литерал
Необработанные строковые литералы менее подвержены ошибкам и удобнее вводить, чем строки со встроенными escape-символами. Щелкните правой кнопкой мыши строку и выберите быстрые действия , чтобы преобразовать ее в необработанный строковый литерал.
Строка преобразуется в: R"(C:\Users\bjarnes\demo\output.txt)"