Visual Studio IDE-Tools für das Upgrade von C++-Code

Visual Studio hilft Ihnen beim Upgrade von Legacy-C++-Code mit Compileroptionen, Codeanalysewarnungen und Editorfeatures wie Quick Fixes, Quick Info und der erweiterten Bildlaufleiste. Der Begriff "Legacycode" bezieht sich auf eine der folgenden Kategorien:

  • Code, der zuvor vom Microsoft C++-Compiler (MSVC) zugelassen wurde, aber nie dem C++-Standard entspricht.

    Um ältere nicht konforme MSVC Code zu aktualisieren, aktivieren Sie die /permissive- Compileroption. Alle Instanzen nicht konformer Verwendungen werden mit roten Squiggles im Code-Editor unterstrichen. Die Fehlermeldungen im Fenster "Fehlerliste " enthalten eine Empfehlung zum Beheben des Fehlers. Klicken Sie in der Dokumentation auf den Fehlercode, um zur Hilfeseite zu wechseln. Wenn alle Fehler gleichzeitig behoben werden, können Sie nicht konformen Code in Phasen aktualisieren, indem Sie die /permissive- Option aktivieren, einige Fehler beheben und dann die Option erneut deaktivieren. Der Code wird mit den neuen Verbesserungen kompiliert, und Sie können die verbleibenden Probleme zu einem späteren Zeitpunkt zurücksetzen und beheben. Beispiele für nicht konformen MSVC Code finden Sie auf der /permissive- Seite.

  • Code, der in einer früheren Version des C++-Standards zulässig war, aber in einer späteren Version veraltet oder entfernt wurde.

    Wenn Sie ein Upgrade auf einen neueren Sprachstandard durchführen möchten, legen Sie die C++-Sprachstandardoption auf den gewünschten Standard fest und beheben Sie alle kompilierten Fehler, die ausgelöst werden. Im Allgemeinen empfehlen wir, den Sprachstandard auf /std:c++17 oder /std:c++20. Die Fehler, die beim Upgrade auf einen neueren Standard ausgelöst werden, hängen nicht mit den Fehlern zusammen, die beim Verwenden der /permissive- Option ausgelöst werden.

  • Code, der allen Versionen des Standards entspricht, gilt jedoch nicht mehr als bewährte Methode in modernen C++-Versionen.

    Um Code zu identifizieren, in dem Änderungen empfohlen werden, führen Sie die Codeanalyse aus.

Öffnen und Konvertieren eines Legacyprojekts

Wenn Ihr Legacyprojekt auf einer älteren Version von Visual Studio basiert, können Sie es in Visual Studio 2017 oder Visual Studio 2019 öffnen. Visual Studio konvertiert es automatisch in das aktuelle Projektschema mit Unterstützung für alle neuesten Compiler- und IDE-Features.

Screenshot of the Upgrade a project dialog.

Weitere Informationen finden Sie unter Upgrade von C++-Projekten aus früheren Versionen von Visual Studio.

Durchsuchen der Codebasis

Das Upgrade einer Codebasis umfasst häufig das Durchsuchen mehrerer Dateien. Um nach allen Elementen in Ihrer Codebasis zu suchen, drücken Sie STRG+T , um das Suchfeld "Alle öffnen" anzuzeigen .

Screenshot of the Go to all dialog.

Um den Suchbereich einzugrenzen, geben Sie einen der 1-Buchstaben-Filter ein, gefolgt von einem Leerzeichen und dann das Gesuchte.

Fehlerliste

Nachdem Sie den gewünschten C++-Sprachstandard und alle anderen Compileroptionen (Project>PropertiesGeneral>) festgelegt haben, drücken Sie STRG+UMSCHALT+B, um Ihr Projekt zu kompilieren. Sie können erwarten, dass einige Fehler und Warnungen in Form von roten Squiggles an verschiedenen Stellen im Code angezeigt werden. Die Fehler werden auch in der Fehlerliste angezeigt. Wenn Sie weitere Informationen zu einem bestimmten Fehler finden möchten, klicken Sie auf den Fehlercode, um zur Hilfeseite in der Dokumentation zu wechseln. Fehlercodes, die mit einem "C" beginnen, sind Compilerfehler. Codes, die mit "MSB" beginnen, sind MSBuild Fehler, die ein Problem mit der Projektkonfiguration angeben.

Screenshot showing compiler and MSBuild errors in Error List.

Dokumentintegritätsindikator

Der Dokumentstatusindikator am unteren Rand des Editors 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.

Document health indicator.

In vielen Fällen finden Sie weitere Informationen zu einem bestimmten Fehler in der Dokumentation zur Visual Studio Änderungsverlauf und Konformitätsverbesserungen.

Verwenden der Codeanalyse zum Modernisieren ihres Codes

Beim Upgrade wird empfohlen, die Codeanalyse für Ihr Projekt auszuführen, sodass der Code mindestens den Microsoft Native Recommended Rules entspricht. Diese Regeln sind eine Kombination aus Regeln, die von Microsoft und einer Teilmenge der C++-Kernrichtlinien definiert sind. Durch die Konformität mit diesen werden Sie häufig auftretende Fehlerquellen erheblich reduzieren oder beseitigen und gleichzeitig ihren Code besser lesbar machen und daher einfacher zu verwalten. Code Analysis die Microsoft Native Recommended Rules verwenden, ist standardmäßig aktiviert. Sie können zusätzliche Regeln unter Project>Properties>Code Analysis aktivieren. Code, der gegen eine der Regeln verstößt, wird als Warnung gekennzeichnet und mit einem grünen Wellenstrich im Code-Editor unterstrichen. Zeigen Sie auf den Mauszeiger, um eine QuickInfo-QuickInfo-QuickInfo anzuzeigen, die das Problem beschreibt.

Screenshot of a Code analysis tooltip.

Klicken Sie in der Spalte "Code " auf das Filtersymbol, um auszuwählen, welche Warnungen angezeigt werden.

Screenshot of Code analysis filters in Error List.

Codeanalysefehler und Warnungen werden auch in der Fehlerliste wie Compilerfehler angezeigt.

Screenshot of Code analysis warnings in Error List.

Sie können ändern, welche Regeln aktiv sind, und benutzerdefinierte Regelsätze erstellen. Weitere Informationen zur Verwendung von Code Analysis finden Sie in der Codeanalyse für C/C++.

Verwenden von Schnellaktionen zum Modernisieren von Code

Der Code-Editor bietet schnelle Aktionen für einige gängige Empfehlungen. Wenn das Glühbirnensymbol angezeigt wird, können Sie darauf klicken, um die verfügbaren Schnellaktionen anzuzeigen.

Konvertieren von Makros in Constexpr-Funktionen

Die folgende Abbildung zeigt die Verwendung des Makros namens AVERAGE", das die Standardsemantikfarbe aufweist. Das Bild zeigt auch die QuickInfo-QuickInfo, die angezeigt wird, wenn der Mauszeiger darauf zeigt:

Screenshot of a QuickInfo macro expansion.

Da die Verwendung von Makros in modernem C++ abgeraten wird, erleichtert Visual Studio das Konvertieren von Makros in constexpr Funktionen:

  1. Klicken Sie mit der rechten Maustaste darauf AVERAGE , und wählen Sie "Zu Definition wechseln" aus.

  2. Klicken Sie auf das Schraubenziehsymbol, und wählen Sie "Makro in constexpr konvertieren" aus.

    Screenshot of a Quick Action macro to constexpr.

Das Makro wird wie unten dargestellt konvertiert:

Screenshot of a constexpr function.

Und der Aufruf AVERAGE wird jetzt als Funktionsaufruf farbiger, und die Quick Info-QuickInfo zeigt den abgeleiteten Typ der Funktion an:

Screenshot of a constexpr function call.

Initialisieren der Variablen

Nicht initialisierte Variablen können zufällige Werte enthalten, die zu schwerwiegenden Fehlern führen. Codeanalyse kennzeichnet diese Instanzen, und der Editor stellt eine schnelle Aktion bereit:

Screenshot of the pop-up for an uninitialized variable.

Konvertieren in ein Rohzeichenfolgenliteral

Unformatierte Zeichenfolgenliterale sind weniger fehleranfällig und bequemer als Zeichenfolgen mit eingebetteten Escapezeichen. Klicken Sie mit der rechten Maustaste auf eine Zeichenfolge, und wählen Sie "Schnelle Aktionen " aus, um sie in ein unformatiertes Zeichenfolgenliteral zu konvertieren.

Raw string literal.

Die Zeichenfolge wird in: R"(C:\Users\bjarnes\demo\output.txt)"konvertiert.