Средства интегрированной среды разработки 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 автоматически преобразует его в текущую схему проекта с поддержкой всех последних функций компилятора и интегрированной среды разработки.

Screenshot of the Upgrade a project dialog.

Дополнительные сведения см. в статье Об обновлении проектов C++ из более ранних версий Visual Studio.

Поиск в базе кода

Обновление базы кода часто включает поиск по нескольким файлам. Чтобы найти что-либо в базе кода, нажмите клавиши CTRL+T , чтобы открыть поле поиска "Перейти ко всем ".

Screenshot of the Go to all dialog.

Чтобы сузить область поиска, введите один из 1-буквных фильтров, за которым следует пробел, а затем то, что вы ищете.

Список ошибок

После задания требуемого стандарта языка C++ и любых других параметров компилятора (общие свойства>проекта>) нажмите клавиши CTRL+SHIFT+B, чтобы скомпилировать проект. Вы можете увидеть некоторые ошибки и предупреждения в виде красных волнистых волн в различных местах в коде. Ошибки также отображаются в списке ошибок. Дополнительные сведения об определенной ошибке щелкните код ошибки, чтобы перейти на страницу справки в документации. Коды ошибок, начинающиеся с "C", являются ошибками компилятора. Коды, начинающиеся с MSB, — это ошибки MSBuild, которые указывают на проблему с конфигурацией проекта.

Screenshot showing compiler and MSBuild errors in Error List.

Индикатор работоспособности документа

Индикатор работоспособности документа в нижней части редактора показывает количество ошибок и предупреждений в текущем документе и позволяет перейти непосредственно от одного предупреждения или ошибки к следующему.

Document health indicator.

Во многих случаях можно найти дополнительные сведения об определенной ошибке в документации по журналу изменений и улучшению соответствия Visual Studio.

Использование анализа кода для модернизации кода

При обновлении рекомендуется выполнить анализ кода в проекте, чтобы код соответствовал минимальным рекомендациям Майкрософт. Эти правила являются сочетанием правил, определенных корпорацией Майкрософт, и подмножеством основных рекомендаций C++ . Соблюдая эти возможности, вы значительно уменьшите или исключите распространенные источники ошибок, и в то же время сделает код более читаемым и, следовательно, проще поддерживать. Анализ кода с помощью рекомендуемых правил Майкрософт включен по умолчанию. Дополнительные правила можно включить в разделе "Анализ кода свойств>проекта".> Код, который нарушает одно из правил, помечается как предупреждение и подчеркивается зеленым волнистой линией в редакторе кода. Наведите указатель мыши на волнистую подсказку QuickInfo , описывающую проблему.

Screenshot of a Code analysis tooltip.

Щелкните значок фильтра в столбце "Код ", чтобы выбрать, какие предупреждения отображаются.

Screenshot of Code analysis filters in Error List.

Ошибки анализа кода и предупреждения также отображаются в списке ошибок компилятора, как и в списке ошибок компилятора.

Screenshot of Code analysis warnings in Error List.

Вы можете изменить активные правила и создать настраиваемые наборы правил. Дополнительные сведения об использовании анализа кода см. в разделе "Анализ кода" для C/C++.

Использование быстрых действий для модернизации кода

Редактор кода предоставляет краткие действия для некоторых распространенных рекомендаций. Когда отображается значок лампочки, щелкните его, чтобы просмотреть доступные быстрые действия.

Преобразование макросов в функции constexpr

На следующем рисунке показано использование макроса AVERAGE, который имеет семантику цветов по умолчанию. На изображении также показана подсказка QuickInfo, отображаемая при наведении курсора мыши на него:

Screenshot of a QuickInfo macro expansion.

Поскольку использование макросов не рекомендуется в современном C++, Visual Studio упрощает преобразование макросов в constexpr функции:

  1. Щелкните правой кнопкой мыши AVERAGE и выберите "Перейти к определению".

  2. Щелкните значок отвертки и выберите "Преобразовать макрос в constexpr"

    Screenshot of a Quick Action macro to constexpr.

Макрос преобразуется, как показано ниже:

Screenshot of a constexpr function.

И вызов AVERAGE теперь цветен в виде вызова функции, а подсказка "Быстрая информация" показывает выводимый тип функции:

Screenshot of a constexpr function call.

Инициализация переменных

Неинициализированные переменные могут содержать случайные значения, которые приводят к серьезным ошибкам. Анализ кода помечает эти экземпляры, а редактор предоставляет быстрое действие:

Screenshot of the pop-up for an uninitialized variable.

Преобразование в необработанный строковый литерал

Необработанные строковые литералы менее подвержены ошибкам и удобнее вводить, чем строки со встроенными escape-символами. Щелкните правой кнопкой мыши строку и выберите быстрые действия , чтобы преобразовать ее в необработанный строковый литерал.

Raw string literal.

Строка преобразуется в: R"(C:\Users\bjarnes\demo\output.txt)"