Bearbeiten und Umgestalten von C++-Code in Visual Studio

In Visual Studio sind mehrere Tools enthalten, mit denen Sie Ihren Code schreiben, bearbeiten und umgestalten können.

IntelliSense

IntelliSense ist ein leistungsstarkes Tool zur Codevervollständigung, das Ihnen bei der Eingabe Symbole und Codeausschnitte vorschlägt. C++-IntelliSense in Visual Studio wird in Echtzeit ausgeführt und analysiert Ihre Codebasis, während Sie diese bearbeiten, und macht Vorschläge. Je mehr Zeichen Sie eingeben, desto kürzer wird die Liste mit Vorschlägen.

Screenshot des Dropdownmenüs für die C++-Memberliste mit den Methoden, die für Zeichenfolgen verfügbar sind, z. B. Methoden zum Anfügen, Zuweisen usw.

Einige Symbole werden automatisch weggelassen, um die Ergebnisse einzugrenzen. Wenn Sie z. B. von außerhalb der Klasse auf die Member eines Klassenobjekts zugreifen, werden standardmäßig keine privaten oder geschützten Member angezeigt (sofern Sie sich nicht im Kontext einer untergeordneten Klasse befinden). Sie können die Filter über die Schaltflächen am unteren Rand anpassen.

Wenn Sie ein Symbol aus der Dropdownliste ausgewählt haben, können Sie es mit der TAB-TASTE, der EINGABETASTE oder mit einem der anderen Commitzeichen übernehmen (standardmäßig { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \). Suchen Sie nach „IntelliSense“ im Schnellstart (STRG + Q), und wählen Sie die Option Text-Editor > C/C++ > Erweitert aus, um Zeichen aus dieser Liste zu entfernen oder dieser hinzuzufügen. Mit der Option Commitzeichen der Memberliste können Sie die gewünschten Änderungen an der Liste vornehmen.

Mit der Option Memberlistenfilter-Modus können Sie festlegen, welche IntelliSense-Vervollständigungsvorschläge angezeigt werden. Standardmäßig ist diese auf Unscharf festgelegt. Bei einer unscharfen Suche können Sie „MAC“ eingeben und die Klasse MyAwesomeClass über die Vervollständigungsvorschläge finden. Der unscharfe Algorithmus legt einen Mindestschwellenwert fest, den Symbole erfüllen müssen, um in der Liste angezeigt zu werden. Intelligentes Filtern zeigt alle Symbole an, die Teilzeichenfolgen enthalten, die der Eingabe entsprechen. Präfixfiltern sucht nach Zeichenfolgen, die mit den eingegebenen Zeichen beginnen.

Weitere Informationen zu C++-IntelliSense finden Sie unter IntelliSense-Features für Visual C++ und Konfigurieren eines C++-Projekts für IntelliSense.

IntelliCode

IntelliCode ist das KI-gestützte Äquivalent zu IntelliSense. Die Funktion zeigt den wahrscheinlichsten Treffer oben in der Liste an. IntelliCode-Empfehlungen basieren auf Tausenden von Open-Source-Projekten auf GitHub, die alle über 100 Sterne haben. Basierend auf dem Kontext Ihres Codes ist die Vervollständigungsliste so konzipiert, dass sie bewährte Vorgehensweisen fördert.

IntelliCode eignet sich beim Schreiben von C++ insbesondere dann, wenn häufig eingesetzte Bibliotheken wie die C++-Standardbibliothek verwendet werden. Der Kontext Ihres Codes wird verwendet, um die besten Empfehlungen zuerst anzuzeigen. Im folgenden Beispiel wird die size-Memberfunktion häufig mit der sort-Funktion verwendet, weshalb sie in der Ergebnisliste ganz oben angezeigt wird.

Screenshot des C++-IntelliCode-Dropdownmenüs, das die Elemente der Vektorklasse anzeigt, die am häufigsten in Ihrem Code verwendet werden.

In Visual Studio 2022 und Visual Studio 2019 ist IntelliCode als optionale Komponente in der Desktopentwicklung mit C++ -Workload verfügbar. Wenn Sie überprüfen möchten, ob IntelliCode für C++ aktiviert ist, navigieren Sie zu Extras>Optionen>IntelliCode>Allgemein, und legen Sie C++-Basismodell auf Aktiviert fest.

In Visual Studio 2017 ist IntelliCode als Erweiterung über den Visual Studio Marketplace verfügbar.

Predictive IntelliSense (Experimentell)

Predictive IntelliSense ist eine experimentelle Funktion, die den Kontext beachtet, um die Anzahl der Ergebnisse in der IntelliSense-Dropdownliste zu reduzieren. Der Algorithmus wendet einen Typenabgleich an, um nur die Ergebnisse anzuzeigen, die dem erwarteten Typ entsprechen. Wenn Sie im einfachsten Fall z. B. int x = eingeben und die Dropdownliste in IntelliSense aufrufen, werden Ihnen nur ganze Zahlen oder Funktionen angezeigt, die ganze Zahlen zurückgeben. Diese Funktion ist standardmäßig deaktiviert, weil sie sich noch in der Entwicklung befindet. Sie funktioniert am besten mit globalen Symbolen. Memberfunktionen werden noch nicht unterstützt. Sie können die Funktion aktivieren, indem Sie „Predictive“ in den Schnellstart eingeben oder indem Sie zu Extras>Optionen>Text-Editor>C/C++>Experimentell>Predictive IntelliSense aktivieren navigieren.

Wenn Sie Predictive IntelliSense außer Kraft setzen und die längere Liste anzeigen möchten, können Sie STRG + J drücken. Wenn Predictive IntelliSense aktiviert ist, wird der prädiktive Filter durch STRG + J entfernt. Wenn Sie STRG + J noch mal drücken, wird der Barrierefreiheitsfilter aus den Memberlistenergebnisse entfernt (falls zutreffend). Die Schaltfläche [+] unterhalb der IntelliSense-Dropdownliste erfüllt denselben Zweck wie STRG + J. Zeigen Sie mit dem Mauszeiger auf die Schaltfläche, um eine QuickInfo zum Angezeigten anzuzeigen.

Screenshot: Predictive IntelliSense für C plus plus.

Auf dem obigen Screenshot werden mehrere Schaltflächen unter der Dropdownliste angezeigt. Über diese Schaltflächen können Sie IntelliSense-Filter für unterschiedliche Ergebnisse anwenden:

  • Variablen und Konstanten
  • Funktionen
  • Typen
  • Makros
  • Enumerationen
  • Namespaces

Eine Schaltfläche wird nur dann angezeigt, wenn sie auch für Ihre aktuelle IntelliSense-Sitzung relevant ist. Normalerweise werden nicht alle Schaltflächen gleichzeitig angezeigt.

IntelliSense für Vorlagen

Die Vorlagenleiste ist ein Benutzeroberflächenelement, das angezeigt wird, wenn sich der Cursor auf einer Vorlagendefinition befindet. Sie ist nützlich, weil Sie Beispielvorlagenargumente für Intellisense bereitstellen können, die während der Bearbeitung des Vorlagentexts angezeigt werden. Sie können beispielsweise angeben, dass ein Vorlagenargument vom Typ std::vector<int> ist. Wenn Sie dieses Argument im Vorlagentext verwenden, werden die Elemente von std::vector<int> in Intellisense angezeigt.

Screenshot der Vorlagenleiste, in der die Option „Alle vorhandenen Instanziierungen hinzufügen“ hervorgehoben ist.

Klicken Sie auf das <T>-Symbol, um die Vorlagenleiste zu erweitern/zuzuklappen. Klicken Sie auf das Bleistiftsymbol, oder doppelklicken Sie auf die Vorlagenleiste, um das Fenster Bearbeiten zu öffnen, in dem Sie die Argumenttypen für die Parameter angeben.

Screenshot der Bearbeitungsoberfläche in der Vorlagenleiste, in der Sie für jeden Vorlagenparameter einen Typ eingeben.

Die Vorlagenleiste kann Parametertypen basierend auf Instanziierungen der Vorlage in Ihrem Code automatisch ausfüllen. Klicken Sie auf Alle vorhandenen Instanziierungen hinzufügen, um eine Liste aller konkreten Argumente anzuzeigen, die verwendet wurden, um die Vorlage in Ihrer Codebasis zu instanziieren.

Screenshot der Vorlage „IntelliSense-Ergebnisse“ mit einer Liste der verschiedenen Typen, die zum Instanziieren des Vorlagenparameters C verwendet werden, wie C = AmbientLight, C = Candle und andere.

Am unteren Rand des Editors wird ein Fenster mit der Position jeder Instanziierung und deren Argumente angezeigt. Sie können eine Instanziierung auswählen, um an den Ort in Ihrem Code zu wechseln, an dem diese Instanziierung gefunden wurde.

Screenshot der Liste der Instanziierungen der Vorlage im Code. Instanziierung, Datei, Ort und Argumente werden aufgelistet.

Die Informationen in der Vorlagenleiste sind benutzerspezifisch. Sie werden im Ordner .vs gespeichert und unterliegen nicht der Quellcodeverwaltung.

Wellenlinien für Fehler und Schnellkorrekturen

Wenn der Editor Probleme in Ihrem Code erkennt, fügt er farbige Wellenlinien unter den betreffenden problematischen Teilen ein. Rote Wellenlinien werden unter Code angezeigt, der nicht kompiliert werden kann. Grüne Wellenlinien geben an, dass ein anderes Problem vorliegt, das dennoch schwerwiegend sein kann. Sie können ein Fenster mit einer Fehlerliste öffnen, um mehr Informationen zu den Problemen zu erhalten.

Bei einigen Fehlern und häufigen Codemustern schlägt der Editor eine schnelle Problembehebung mit einem Glühbirnensymbol vor, das angezeigt wird, wenn Sie mit dem Mauszeiger auf die Wellenlinie zeigen. Klicken Sie auf den Pfeil nach unten, um die Vorschläge anzuzeigen.

Im folgenden Beispiel wurde ein vector-Objekt deklariert, aber es konnte keine Definition gefunden werden, weshalb der Editor vorschlägt, die nötige Headerdatei einzubeziehen:

Screenshot eines Fehlers und der vorgeschlagene schnellen Problembehebung für #include vector.

Der Editor bietet zudem Schnellkorrekturen für mögliche Refactorings. Wenn Sie beispielsweise eine Klasse in einer Headerdatei deklarieren, schlägt Visual Studio für diese eine Definition in einer separaten CPP-Datei vor.

Screenshot der Schnellkorrektur, in dem die Schnellkorrektur für die Definition von „Create“ für den Kanalrouteniterator in „Channels dot C p p“ hervorgehoben ist.

Änderungsnachverfolgung

Jedes Mal, wenn Sie eine Datei ändern, wird eine gelbe Leiste auf der linken Seite angezeigt, um anzugeben, dass Änderungen vorgenommen wurden, die noch nicht gespeichert wurden. Wenn Sie die Datei speichern, wird die Leiste grün. Die grüne und gelbe Leiste werden solange angezeigt, wie das Dokument im Editor geöffnet ist. Sie zeigen die Änderungen an, die seit der letzten Öffnung des Dokuments vorgenommen wurden.

Screenshot von C plus plus Änderungsnachverfolgung. Eine gelbe Leiste am linken Rand wird angezeigt, um Änderungen anzugeben.

Verschieben von Code

Sie können Codezeilen nach oben oder unten verschieden, indem Sie diese auswählen, die ALT-TASTE gedrückt halten und die NACH-OBEN-/NACH-UNTEN-TASTEN verwenden.

Einfügen von Codeausschnitten

Ein Ausschnitt ist ein vordefinierter Teil des Quellcodes. Klicken Sie mit der rechten Maustaste auf einen einzelnen Punkt oder auf markierten Text und wählen Sie „Ausschnitt“ aus, um einen Ausschnitt einzufügen oder den markierten Text mit dem jeweiligen Ausschnitt zu umschließen. Die folgende Abbildung zeigt die drei Schritte zum Umschließen einer ausgewählten-Anweisung mit einer „for“-Schleife. Die gelben Markierungen im endgültigen Bild sind veränderbare Felder, auf die Sie mit der TAB-Taste zugreifen. Weitere Informationen finden Sie unter Codeausschnitte.

Screenshot des Dropdown-Steuerelements „Ausschnitt einfügen“.

Eine Funktion ist ausgewählt. In der Dropdownliste, die nach einem Rechtsklick auf den Funktionsnamen angezeigt wird, ist „Umschließen mit...“ gelb hervorgehoben. In der Dropdownliste „Umschließen mit“ ist der Codeausschnitt für eine „fo“-Schleife ausgewählt. Dies führt dazu, dass eine for-Schleife um die Funktion herum eingefügt wird. Die Schleifenvariable und der Grenzwert werden gelb angezeigt, um anzugeben, dass es sich um bearbeitbare Felder handelt.

Klasse hinzufügen

Über das Menü Projekt oder über das Kontextmenü im Projektmappen-Explorer können Sie eine neue Klasse hinzufügen:

Screenshot des Dialogfelds „Neue Klasse hinzufügen“. Es verfügt über Felder für den Klassennamen, Eingabehilfen, Dateien zum Speichern der Deklaration und Implementierung und so weiter.

Sie können auch den Klassen-Assistenten verwenden, um eine vorhandene Klasse zu ändern oder zu untersuchen.

Screenshot des Klassen-Assistenten mit Optionen zum Hinzufügen von Methoden, Membervariablen und vielem mehr.

Weitere Informationen finden Sie unter Adding Functionality with Code Wizards (C++) (Hinzufügen neuer Funktionen mit Code-Assistenten (C++)).

Umgestaltung

Refactorings stehen unter dem Kontextmenü „Schnelle Aktion“ oder durch Klicken auf eine Glühbirne im Editor zur Verfügung. Einige befinden sich auch im Menü Bearbeiten > Umgestalten. Zu diesen Features zählen:

Erzwingung von Codeformat mit ClangFormat und EditorConfig

Visual Studio 2017 und höher enthält integrierte Unterstützung für ClangFormat, ein beliebtes Dienstprogramm zum Formatieren von Code für C++, das auf Clang/LLVM basiert. Geben Sie „ClangFormat“ in den Schnellstart ein, um festzulegen, welches der folgenden gängigen Formate es verwenden soll:

  • LLVM
  • Google
  • Chromium
  • Mozilla
  • WebKit
  • Visual Studio

Sie können auch Ihr eigenes .clang-format oder eine _clang-format-Datei angeben, um benutzerdefinierte Regeln auf alle Codedateien auf der gleichen oder einer niedrigeren Ebene anzuwenden.

Die Dateien können über die Quellcodeverwaltung leicht freigegeben werden, sodass Sie Programmierkonventionen in Ihrem gesamten Entwicklungsteam erzwingen können.

Screenshot mit einer Clang-Formatdatei, die viele Optionen wie Spaltenlimit, Einzugsbreite, Registerkartenbreite usw. enthält.

Visual Studio 2017 und höher unterstützt zudem EditorConfig, welches ähnlich funktioniert. ClangFormat hat jedoch mehr Formatoptionen als EditorConfig, z. B. auch C++-spezifische Regeln. Mit EditorConfig können Sie EDITORCONFIG-Dateien erstellen und diese in unterschiedlichen Ordnern Ihrer Codebasis ablegen, um Codeformate für diese Ordner und ihre Unterordner anzugeben. Eine EDITORCONFIG-Datei ersetzt alle anderen EDITORCONFIG-Dateien in übergeordneten Ordnern und überschreibt alle Formatierungseinstellungen, die über Extras>Optionen vorgenommen wurden. Sie können z. B. Regeln für Tabs, Leerzeichen und Einzugsgröße festlegen. Weitere Informationen finden Sie unter Create portable, custom editor settings with EditorConfig (Erstellen von portablen, benutzerdefinierten Editor-Einstellungen mit EditorConfig).

Andere Formatierungsoptionen

Über das Schnellstart-Suchfeld können Sie eine Einstellung oder ein Tool am schnellsten finden. Es befindet sich im Hauptmenü. Beginnen Sie mit der Eingabe, und die Autovervollständigungsliste filtert die Ergebnisse.

Screenshot des Suchfelds „Schnellstart“. Es zeigt die erweiterte Suche in C plus plus, die in Optionen für den Text-Editor resultiert.

Geben Sie zum Festlegen von Formatierungsoptionen, z. B. Einzügen, Klammerabschluss und Farbgebung, „C++-Formatierung“ im Fenster Schnellstart ein.

Screenshot mit C++-Formatierungsoptionen, z. B. ob ein automatischer Einzug eingefügt wird, wenn Sie die Tabulatortaste drücken.

Andere Formatierungsoptionen finden Sie unter Bearbeiten>Erweitert im Hauptmenü.

Screenshot mit erweiterten Bearbeitungsoptionen wie dem Anzeigen von Leerzeichen, Wortumbruch, Kommentar einer Auswahl, Erhöhung des Zeileneinzugs und mehr.

Optionen zum Aktivieren und Konfigurieren von C++-spezifischen Bearbeitungsfeatures finden Sie unter Extras>Optionen>Text-Editor>C/C++ . Wenn Sie die gewünschte Option ausgewählt haben, können Sie mit F1 weitere Hilfethemen abrufen, wenn das Dialogfeld im Fokus ist. Geben Sie Editor C++ in den Schnellstart ein, um allgemeine Codeformatierungsoptionen abzurufen.

Screenshot mit dem ausgewählten Menüelement „Tools“ im Visual Studio-Menü und hervorgehobenem Menüelement „Optionen“.

Experimentelle Features, die möglicherweise nicht in einer zukünftigen Version von Visual Studio enthalten sind, finden Sie im Dialogfeld Text Editor C++ Experimental (C++-Text-Editor „Experimentell“). In Visual Studio 2017 und höher können Sie Predictive IntelliSense in diesem Dialogfeld aktivieren.

Siehe auch

Lesen und Verstehen von C++-Code
Navigieren in C++-Code in Visual Studio
Zusammenarbeit mit Live Share für C++