Visual Studio-IDE-Tools C++ für die Aktualisierung von CodeVisual Studio IDE tools for upgrading C++ code

Visual Studio unterstützt Sie bei C++ der Aktualisierung von Legacy Code mit Compileroptionen, Code Analyse Warnungen und Editor-Funktionen wie schnell Korrekturen, QuickInfo und der verbesserten Bild Lauf Leiste.Visual Studio helps you upgrade legacy C++ code with compiler options, code analysis warnings, and editor features such as Quick Fixes, Quick Info, and the enhanced scroll bar. Der Begriff "Legacy Code" bezieht sich auf eine dieser Kategorien:The term "legacy code" refers to any of these categories:

  • Code, der zuvor vom Microsoft C++ -Compiler (MSVC) zugelassen wurde, jedoch nie mit dem C++ standardkonform ist.Code that was formerly allowed by the Microsoft C++ compiler (MSVC) but never conformed to the C++ standard.

    Um älteren nicht kompatiblen MSVC-Code zu aktualisieren, aktivieren Sie die /permissive- -Compileroption.To upgrade older non-conformant MSVC code, turn on the /permissive- compiler option. Alle Instanzen von nicht konformen Verwendungen werden im Code-Editor mit roten Wellenlinien unterstrichen.All instances of non-conformant usages are underlined with red squiggles in the code editor. Die Fehlermeldungen im Fehlerliste Fenster enthalten eine Empfehlung zum Beheben des Fehlers.The error messages in the Error List window include a recommendation for how to fix the error. Klicken Sie auf den Fehlercode, um zur zugehörigen Hilfeseite in der Dokumentation zu wechseln.Click on the error code to go to its help page in the documentation. Wenn alle Fehler gleichzeitig behoben werden können, können Sie nicht kompatiblen Code in Phasen aktualisieren, indem Sie die Option " permissive- Option" aktivieren, einige Fehler beheben und die Option dann wieder deaktivieren.If fixing all the errors at once is impractical, you can upgrade non-conformant code in stages by turning on the permissive- option, fixing some errors, then turning the option off again. Der Code wird mit den neuen Verbesserungen kompiliert, und Sie können die restlichen Probleme zu einem späteren Zeitpunkt wieder beheben.The code will compile with the new improvements, and you can go back and fix the remaining issues at a later time. Beispiele für nicht konformen MSVC-Code finden Sie auf der Seite /permissive- .See the /permissive- page for examples of non-conformant MSVC code.

  • Code, der in einer früheren Version des C++ Standards zulässig war, jedoch in einer späteren Version veraltet ist oder entfernt wurde.Code that was permitted in an earlier version of the C++ standard but has been deprecated or removed in a later version.

    Wenn Sie ein Upgrade auf einen neueren Sprachstandard durchführen möchten, legen Sie die C++ Option Language Standard auf den gewünschten Standard fest, und beheben Sie alle ausgelöbenen KompilierungsfehlerTo upgrade to a newer language standard, set the C++ Language Standard option to the desired standard and fix any compile errors that are raised. Im Allgemeinen wird empfohlen, den Sprachstandard auf /Std: c++ 17festzulegen.In general, we recommend setting the language standard to /std:c++17. Die Fehler, die beim Upgrade auf einen neueren Standard ausgelöst werden, stehen nicht im Zusammenhang mit den Fehlern, die bei Verwendung der permissive- Option ausgelöst werden.The errors raised when upgrading to a newer standard are not related to the errors raised when using the permissive- option.

  • Code, der allen Versionen des Standards entspricht, aber nicht mehr als bewährte Vorgehensweise in modernen C++gilt.Code that conforms to all versions of the standard but is no longer considered best practice in modern C++.

    Führen Sie die Code Analyseaus, um Code zu identifizieren, in dem Änderungen empfohlen werden.To identify code where changes are recommended, run Code analysis.

Öffnen und Konvertieren eines Legacy ProjektsOpen and convert a legacy project

Wenn Ihr Legacy Projekt auf einer älteren Version von Visual Studio basiert, können Sie es in Visual Studio 2017 oder Visual Studio 2019 öffnen.If your legacy project is based on an older version of Visual Studio, you can open it in Visual Studio 2017 or Visual Studio 2019. Visual Studio konvertiert sie automatisch in das aktuelle Projekt Schema mit Unterstützung für alle neuesten Compiler-und IDE-Features.Visual Studio automatically converts it to the current project schema with support for all the latest compiler and IDE features.

Aktualisieren eines ProjektsUpgrade a project

Weitere Informationen finden Sie unter aktualisieren C++ von Projekten aus früheren Versionen von Visual Studio.For more information, see Upgrade C++ projects from earlier versions of Visual Studio.

Durchsuchen der CodebasisSearch the code base

Das Upgrade einer Codebasis umfasst häufig das Durchsuchen mehrerer Dateien.Upgrading a code base often involves searching through multiple files. Um in der Codebasis nach etwas zu suchen, drücken Sie STRG + T , um das Feld Gehe zu allen suchen zu öffnen.To search for anything in your code base, press Ctrl+T to bring up the Go to All search box.

Gehe zu allenGo to all

Um den Suchbereich einzugrenzen, geben Sie einen der Filter mit den 1 Buchstaben ein, gefolgt von einem Leerzeichen und dem gesuchten, das Sie suchen.To narrow the search scope, type one of the 1-letter filters, followed by a space and then the thing you are looking for.

FehlerlisteError List

Nachdem Sie den gewünschten sprach C++ Standard und alle anderen Compileroptionen (Projekt > Eigenschaften > Allgemein) festgelegt haben, drücken Sie STRG + UMSCHALT + B , um das Projekt zu kompilieren.After you set the desired C++ Language Standard and any other compiler options (Project > Properties > General), press Ctrl+Shift+B to compile your project. Es ist zu erwarten, dass einige Fehler und Warnungen in Form von roten Wellenlinien an verschiedenen Stellen im Code angezeigt werden.You can expect to see some errors and warnings in the form of red squiggles in various places in the code. Die Fehler werden auch im Fehlerlisteangezeigt.The errors also appear in the Error List. Um weitere Informationen zu einem bestimmten Fehler zu erhalten, klicken Sie auf den Fehlercode, um zur Hilfeseite in der Dokumentation zu gelangen.For more information about an specific error, click on the error code to go to the help page in the documentation. Fehlercodes, die mit "C" beginnen, sind Compilerfehler.Error codes that begin with a "C" are compiler errors. Codes, die mit "MSB" beginnen, sind MSBuild-Fehler, die auf ein Problem mit der Projekt Konfiguration hinweisen.Codes that begin with "MSB" are MSBuild errors that indicate a problem with the project configuration.

Compilerfehler und MSBuild-Fehler in FehlerlisteCompiler and MSBuild errors in Error List

Dokument Integritäts IndikatorDocument Health Indicator

Der Dokument Integritäts Indikator unten im Editor zeigt die Anzahl der Fehler und Warnungen im aktuellen Dokument an und ermöglicht es Ihnen, direkt von einer Warnung/einem Fehler zum nächsten zu navigieren.The document health indicator at the bottom of the editor shows the number of errors and warnings in the current document, and enables you to navigate directly from one warning/error to the next.

Dokument Integritäts IndikatorDocument health indicator

In vielen Fällen finden Sie weitere Informationen zu einem bestimmten Fehler in der Dokumentation zu Visual Studio-Änderungs Verlauf und den Verbesserungen bei der Konformität.In many cases, you can find more information about a specific error in the documentation on the Visual Studio change history and conformance improvements.

Verwenden der Code Analyse zur Modernisierung ihres CodesUse code analysis to modernize your code

Beim Upgrade wird empfohlen, dass Sie die Code Analyse für Ihr Projekt ausführen, damit der Code mindestens den von Microsoft systemeigenen empfohlenen Regeln entspricht.When upgrading, we recommend that you run code analysis on your project so that the code, conforms at a minimum to the Microsoft Native Recommended Rules. Diese Regeln sind eine Kombination von Regeln, die C++ von Microsoft und einer Teilmenge der wichtigsten Richtlinien definiert werden.These rules are a combination of rules defined by Microsoft and a subset of the C++ Core Guidelines. Wenn Sie diese einhalten, werden häufige Fehlerquellen erheblich reduziert oder beseitigt, und gleichzeitig wird der Code besser lesbar und somit einfacher zu verwalten.By conforming to these you will greatly reduce or eliminate common sources of bugs, and at the same time make your code more readable and therefore easier to maintain. Standardmäßig ist die Code Analyse mit den empfohlenen Microsoft-Regeln aktiviert.Code Analysis using the Microsoft Native Recommended Rules is enabled by default. Sie können zusätzliche Regeln unter Projekt > Eigenschaften > Code Analyseaktivieren.You can enable additional rules under Project > Properties > Code Analysis. Code, der gegen eine der Regeln verstößt, wird als Warnung gekennzeichnet und im Code-Editor mit einer grünen Wellenlinie unterstrichen.Code that violates one of the rules is flagged as a warning and is underlined with a green squiggle in the code editor. Zeigen Sie auf die Wellenlinie, um eine QuickInfo-QuickInfo anzuzeigen, in der das Problem beschrieben wird.Hover over the squiggle to see a QuickInfo tooltip that describes the issue.

Code Analyse-QuickInfoCode analysis tooltip

Klicken Sie in der Spalte Code auf das Filter Symbol, um auszuwählen, welche Warnungen angezeigt werden.Click on the filter icon in the Code column to choose which warnings are displayed.

Code Analyse Filter in FehlerlisteCode analysis filters in Error List

Code Analysefehler und-Warnungen werden auch im Fehlerliste wie Compilerfehler angezeigt.Code analysis errors and warnings also appear in the Error List just like compiler errors.

Code Analyse Warnungen in FehlerlisteCode analysis warnings in Error List

Sie können ändern, welche Regeln aktiv sind, und benutzerdefinierte RuleSets erstellen.You can change which rules are active, and create custom rulesets. Weitere Informationen zur Verwendung der Code Analyse finden Sie unter Code Analyse für CC++ /Overview.For more information about using Code Analysis, see Code analysis for C/C++ overview.

Verwenden von schnellen Aktionen zur Modernisierung von CodeUse Quick Actions to modernize code

Der Code-Editor bietet schnelle Aktionen für einige gängige Empfehlungen.The code editor provides Quick Actions for some common recommendations. Wenn das Glühbirnen Symbol angezeigt wird, können Sie darauf klicken, um die verfügbaren schnellen Aktionen anzuzeigen.When the light bulb icon is displayed, you can click on it to see the available Quick Actions.

Konvertieren von Makros in constexpr-FunktionenConvert macros to constexpr functions

Die folgende Abbildung zeigt die Verwendung des Makros namens AVERAGE, das die standardmäßige semantische Farbgebung aufweist.The following image shows the use of macro called AVERAGE, which has the default semantic colorization. Das Bild zeigt außerdem die QuickInfo-QuickInfo an, die angezeigt wird, wenn mit dem Mauszeiger darauf gezeigt wird:The image also shows the QuickInfo tooltip that is displayed when the mouse cursor hovers over it:

QuickInfo-Makro ErweiterungQuickInfo macro expansion

Da die Verwendung von Makros in modernen C++nicht empfehlenswert ist, erleichtert Visual Studio das Konvertieren von Makros in constexpr -Funktionen:Because the use of macros is discouraged in modern C++, Visual Studio makes it easy to convert macros to constexpr functions:

  1. Klicken Sie mit der rechten Maustaste auf AVERAGE und wählen Sie Gehe zu Definitionaus.Right-click on AVERAGE and choose Go to Definition.

  2. Klicken Sie auf das Schrauben Schraubensymbol, und wählen Sie Makro in constexpr konvertieren aus.Click on the screwdriver icon and choose Convert macro to constexpr

    Schnell Action-Makro in constexprQuick Action macro to constexpr

Das-Makro wird wie unten dargestellt konvertiert:The macro is converted as shown below:

constexpr-Funktionconstexpr function

Und der AVERAGE-Aufrufe wird jetzt als Funktions aufzurufen markiert, und der QuickInfo zeigt den deduzierten Typ der Funktion an:And the call to AVERAGE is now colorized as a function call, and the Quick Info tooltip shows the deduced type of the function:

constexpr-Funktionsaufrufeconstexpr function call

Initialisieren der VariablenInitialize variables

Nicht initialisierte Variablen können zufällige Werte enthalten, die zu schwerwiegenden Fehlern führen.Uninitialized variables can hold random values that lead to serious bugs. Die Code Analyse Flags diese Instanzen, und der Editor stellt eine schnelle Aktion bereit:Code analysis flags these instances, and the editor provides a Quick Action:

Variable initialisierenInitialize variable

Zu Rohzeichenfolgenliteral konvertierenConvert to raw string literal

Unformatierte Zeichen folgen Literale sind weniger fehleranfällig und bequemer zum eingeben als Zeichen folgen mit eingebetteten Escapezeichen.Raw string literals are less error-prone and more convenient to type than strings with embedded escape characters. Klicken Sie mit der rechten Maustaste auf eine Zeichenfolge, und wählen Sie schnelle Aktionen aus, um Sie in eine unformatierte ZeichenfolgeRight-click on a string and choose Quick Actions to convert it to a raw string literal.

RAW String-wahrstenRaw string literal

Die Zeichenfolge wird in: R"(C:\Users\bjarnes\demo\output.txt)"konvertiert.The string is converted to: R"(C:\Users\bjarnes\demo\output.txt)".