Bearbeiten und Umgestalten von C++-Code in Visual StudioEdit and refactor C++ code in Visual Studio

In Visual Studio sind mehrere Tools enthalten, mit denen Sie Ihren Code schreiben, bearbeiten und umgestalten können.Visual Studio provides several tools to help you write, edit, and refactor your code.

IntelliSenseIntelliSense

IntelliSense ist ein leistungsstarkes Tool zur Codevervollständigung, das Ihnen bei der Eingabe Symbole und Codeausschnitte vorschlägt.IntelliSense is a powerful code completion tool that suggests symbols and code snippets for you as you type. C++-IntelliSense in Visual Studio wird in Echtzeit ausgeführt und analysiert Ihre Codebasis, während Sie diese bearbeiten, und macht Vorschläge.C++ IntelliSense in Visual Studio runs in real time, analyzing your codebase as you update it and providing recommendations. Je mehr Zeichen Sie eingeben, desto kürzer wird die Liste mit Vorschlägen.As you type more characters, the list of recommended results narrows down.

Dropdownliste mit Membern (C++)

Einige Symbole werden automatisch weggelassen, um die Ergebnisse einzugrenzen.Some symbols are omitted automatically to help narrow down the results. Wenn Sie z. B. auf die Member eines Klassenobjekts von außerhalb der Klasse zugreifen, werden standardmäßig keine privaten oder geschützten Member angezeigt (wenn Sie sich nicht im Kontext einer untergeordneten Klasse befinden).For example, when accessing a class object's members from outside the class, you will not be able to see private members by default, or protected members (if you are not in the context of a child class). Sie können die Filter über die Schaltflächen am unteren Rand anpassen.You can adjust the filtering by using the buttons at the bottom.

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 { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \).After you choose the symbol from the drop-down list, you can autocomplete it with Tab , Enter , or one of the other commit characters (by default: { } [ ] ( ) . , : ; + - * / % & | ^ ! = ? @ # \). Suchen Sie nach „IntelliSense“ im Schnellstart (STRG + Q), und wählen Sie Text-Editor > C/C++ > Erweitert aus, um Symbole aus dieser Liste zu entfernen oder dieser hinzuzufügen.To add or remove characters from this list, search for "IntelliSense" in Quick Launch (Ctrl + Q) and choose the Text Editor > C/C++ > Advanced option. Mit der Option Commitzeichen der Memberliste können Sie die gewünschten Änderungen an der Liste vornehmen.The Member List Commit Characters option enables you to customize the list with the changes you want.

Mit der Option Memberlistenfilter-Modus können Sie festlegen, welche IntelliSense-Vervollständigungsvorschläge angezeigt werden.The Member List Filter Mode option controls what kinds of IntelliSense autocomplete suggestions you see. Standardmäßig ist diese auf Fuzzy (unscharf) festgelegt.By default, it is set to Fuzzy. Bei einer unscharfen Suche können Sie „MAC“ eingeben und die Klasse MyAwesomeClass über die Vervollständigungsvorschläge finden.In a fuzzy search, if you have a symbol called MyAwesomeClass , you can type "MAC" and find the class in your autocomplete suggestions. Der unscharfe Algorithmus legt einen Mindestschwellenwert fest, den Symbole erfüllen müssen, um in der Liste angezeigt zu werden.The fuzzy algorithm sets a minimum threshold that symbols must meet to show up in the list. Intelligentes Filtern zeigt alle Symbole an, die Teilzeichenfolgen enthalten, die der Eingabe entsprechen.Smart filtering displays all symbols containing substrings that match what you typed. Präfixfiltern sucht nach Zeichenfolgen, die mit den eingegebenen Zeichen beginnen.Prefix filtering searches for strings that begin with what you typed.

Weitere Informationen zu C++-IntelliSense finden Sie unter IntelliSense-Features für Visual C++ und Konfigurieren eines C++-Projekts für IntelliSense.For more information about C++ IntelliSense, see Visual C++ IntelliSense and Configure a C++ project for IntelliSense.

IntelliCodeIntelliCode

IntelliCode ist das KI-gestützte Äquivalent zu IntelliSense.IntelliCode is AI-assisted IntelliSense. Die Funktion zeigt den wahrscheinlichsten Treffer oben in der Liste an.It puts the most likely candidate at the top of your completion list. IntelliCode-Empfehlungen basieren auf Tausenden von Open-Source-Projekten auf GitHub, die alle über 100 Sterne haben.IntelliCode recommendations are based on thousands of open source projects on GitHub each with over 100 stars. Basierend auf dem Kontext Ihres Codes ist die Vervollständigungsliste so konzipiert, dass sie bewährte Vorgehensweisen fördert.When combined with the context of your code, the completion list is tailored to promote common practices.

IntelliCode eignet sich beim Schreiben von C++ insbesondere dann, wenn häufig eingesetzte Bibliotheken wie die C++-Standardbibliothek verwendet werden.When writing C++, IntelliCode will assist when using popular libraries such as the C++ Standard Library. Der Kontext Ihres Codes wird verwendet, um die besten Empfehlungen zuerst anzuzeigen.The context of your code is used to provide the most useful recommendations first. Im folgenden Beispiel wird die size-Memberfunktion häufig mit der sort-Funktion verwendet, weshalb sie ganz oben in der Ergebnisliste angezeigt wird.In the following example, the size member function is commonly used with the sort function, so it is surfaced to the top of the results list.

C++ IntelliCodeC++ IntelliCode

In Visual Studio 2019 ist IntelliCode als optionale Komponente in der Desktopentwicklung mit C++ -Workload verfügbar.In Visual Studio 2019, IntelliCode is available as an optional component in the C++ Desktop Development workload. 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.To make sure that IntelliCode is active for C++, go to Tools > Options > IntelliCode > General and set C++ base model to Enabled.

In Visual Studio 2017 ist IntelliCode als Erweiterung über den Visual Studio Marketplace verfügbar.In Visual Studio 2017, IntelliCode is available as an extension in the Visual Studio Marketplace.

Predictive IntelliSense (Experimentell)Predictive IntelliSense (Experimental)

Predictive IntelliSense ist eine experimentelle Funktion, die den Kontext beachtet, um die Anzahl der Ergebnisse in der IntelliSense-Dropdownliste zu reduzieren.Predictive IntelliSense is an experimental feature that uses contextual awareness to limit the number of results displayed in the IntelliSense dropdown list. Der Algorithmus wendet einen Typenabgleich an, um nur die Ergebnisse anzuzeigen, die dem erwarteten Typ entsprechen.The algorithm applies type matching so that it shows only those results that match the expected type. 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.In the simplest case, if you type int x = and invoke the IntelliSense dropdown, you will see only integers or functions returning integers. Diese Funktion ist standardmäßig deaktiviert, weil sie sich noch in der Entwicklung befindet.This feature is off by default because it is still in development. Sie funktioniert am besten mit globalen Symbolen. Memberfunktionen werden noch nicht unterstützt.It works best with global symbols; member functions are not yet supported. 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.You can turn it on by typing "Predictive" in Quick Launch or by going to Tools > Options > Text Editor > C/C++ > Experimental > Enable Predictive IntelliSense.

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.To override Predictive IntelliSense and show the longer list, press Ctrl + J. If Predictive IntelliSense is on, invoking Ctrl + J removes the Predictive filter. Wenn Sie STRG + J noch mal drücken, wird der Barrierefreiheitsfilter aus den Memberlistenergebnisse entfernt (falls zutreffend).Pressing Ctrl + J again removes the accessibility filter from Member List results where relevant. 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.The ([+]) button under the IntelliSense dropdown list does the same thing as Ctrl + J. Hover over the button to see tooltip information about what is being shown.

C++ Predictive IntelliSenseC++ Predictive IntelliSense

Auf dem obigen Screenshot werden mehrere Schaltflächen unter der Dropdownliste angezeigt.The preceding screenshot shows several buttons under the dropdown list. Über diese Schaltflächen können Sie IntelliSense-Filter für unterschiedliche Ergebnisse anwenden:These enable IntelliSense Filters for different kinds of results:

  • Variablen und KonstantenVariables and Constants
  • FunktionenFunctions
  • TypenTypes
  • MakrosMacros
  • EnumerationenEnums
  • NamespacesNamespaces

Eine Schaltfläche wird nur dann angezeigt, wenn sie auch für Ihre aktuelle IntelliSense-Sitzung relevant ist.A button is displayed only if it is relevant to your current IntelliSense session. Normalerweise werden nicht alle Schaltflächen gleichzeitig angezeigt.You typically do not see all the buttons at the same time.

IntelliSense für VorlagenTemplate IntelliSense

Wenn sich die Einfügemarke in einer Vorlagendefinition befindet, wird eine Vorlagenleiste angezeigt, über die Sie Beispielvorlagenargumente für IntelliSense angeben können.When the caret is inside a template definition, a Template Bar appears, which enables you to provide sample template arguments for IntelliSense.

C++ IntelliSense-Vorlage, vorhandene InstanziierungenC++ Template IntelliSense Show Existing Instantiations

Klicken Sie auf das <T> -Symbol, um die Vorlagenleiste zu erweitern/zuzuklappen.Click the <T> icon to expand/collapse the Template Bar. Klicken Sie auf das Stiftsymbol, oder doppelklicken Sie auf die Vorlagenleiste , um das Bearbeitungsfenster zu öffnen.Click the pencil icon or double-click the Template Bar to open the Edit window.

C++ IntelliSense-VorlageC++ Template IntelliSense

Im Fenster vorgenommene Änderungen werden direkt im Quellcode widergespiegelt, sodass Sie die Auswirkungen in Echtzeit sehen können.Edits that you make in the window are applied directly to the source code, so that you can see the effects in real time.

Die Vorlagenleiste kann Kandidaten basierend auf Instanziierungen in Ihrem Code automatisch auffüllen.The Template Bar can auto-populate candidates based on instantiations in your code. 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.Click on Add All Existing Instantiations to see a list of all concrete arguments that have been used to instantiate the template throughout your code base.

C++ IntelliSense-Vorlage zu ErgebnislisteC++ Template IntelliSense Results List

Am unteren Rand des Editors wird ein Fenster mit der Position jeder Instanziierung und deren Argumente angezeigt.A window at the bottom of the editor shows where each instantiation was found, and what its arguments were.

C++ IntelliSense-Vorlage InstanziierungsübersichtC++ Template IntelliSense Instantiation Map

Die Informationen in der Vorlagenleiste werden als benutzerspezifisch angesehen.Template Bar information is treated as user-specific. Sie werden im VS-Ordner gespeichert und nicht im Quellcode widergespiegelt.It is stored in the .vs folder and is not committed to source control.

Wellenlinien für Fehler und SchnellkorrekturenError squiggles and quick fixes

Wenn der Editor Probleme in Ihrem Code erkennt, fügt er farbige Wellenlinien unter den betreffenden problematischen Teilen ein.If the editor detects problems with your code, it will add colored squiggles under the problem. Rote Wellenlinien werden unter Code angezeigt, der nicht kompiliert werden kann.Red squiggles indicate code that won't compile. Grüne Wellenlinien geben an, dass ein anderes Problem vorliegt, das dennoch schwerwiegend sein kann.Green squiggles indicate other kinds of problems that might still be potentially serious. Sie können ein Fenster mit einer Fehlerliste öffnen, um mehr Informationen zu den Problemen zu erhalten.You can open the Error List window to get more information about the problems.

Bei einigen Fehlern und häufigen Codemustern schlägt der Editor eine Schnellkorrektur mit einem Glühbirnensymbol vor, das angezeigt wird, wenn Sie mit dem Mauszeiger auf die Wellenlinie zeigen.For some kinds of errors, as well as common coding patterns, the editor will offer a Quick Fix in the form of a light bulb that appears when you hover over the squiggle. Klicken Sie auf den Pfeil nach unten, um die Vorschläge anzuzeigen.Click the down arrow to see the suggestions.

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:In the following example, a vector was declared but no definition was found, so the editor offers to include the necessary header file:

Screenshot mit Fehlerwellenlinien und der Schnellkorrektur im EditorScreenshot showing error squiggles and the quick fix that the editor offers.

Der Editor bietet zudem Schnellkorrekturen für mögliche Refactorings.The editor also offers Quick Fixes for some refactoring opportunities. Wenn Sie beispielsweise eine Klasse in einer Headerdatei deklarieren, schlägt Visual Studio für diese eine Definition in einer separaten CPP-Datei vor.For example, if you declare a class in a header file, Visual Studio will offer to create a definition for it in a separate .cpp file.

Screenshot der Schnellkorrektur, in dem die Schnellkorrektur für die Definition von „Create“ für den Kanalrouteniterator in „Channels dot C p p“ hervorgehoben istScreenshot showing the quick fix with the Create definition of Channel Route Iterator in channels dot C P P option highlighted.

ÄnderungsnachverfolgungChange tracking

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.Whenever you make a change to a file, a yellow bar appears on the left to indicate that unsaved changes were made. Wenn Sie die Datei speichern, wird die Leiste grün.When you save the file, the bar turns green. Die grüne und gelbe Leiste werden solange angezeigt, wie das Dokument im Editor geöffnet ist.The green and yellow bars are preserved as long as the document is open in the editor. Sie zeigen die Änderungen an, die seit der letzten Öffnung des Dokuments vorgenommen wurden.They represent the changes that were made since you last opened the document.

C++ ÄnderungsnachverfolgungC++ change tracking

Verschieben von CodeMove 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.You can move lines of code up and down by selecting them, holding down Alt, and pressing the Up/Down arrow keys.

Einfügen von CodeausschnittenInsert snippets

Ein Ausschnitt ist ein vordefinierter Teil des Quellcodes.A snippet is a predefined piece of source code. Klicken Sie mit der rechten Maustaste auf einen einzelnen Punkt oder auf ausgewählten Text, um einen Ausschnitt einzufügen oder den ausgewählten Text mit dem jeweiligen Ausschnitt zu umschließen.Right-click on a single point or on selected text to either insert a snippet or surround the selected text with the snippet. Die folgende Abbildung zeigt die drei Schritte zum Umschließen einer ausgewählten-Anweisung mit einer „for“-Schleife.The following illustration shows the three steps to surround a selected statement with a for loop. Die gelben Markierungen im endgültigen Bild sind veränderbare Felder, auf die Sie mit der TAB-Taste zugreifen.The yellow highlights in the final image are editable fields that you access with the tab key. Weitere Informationen finden Sie unter Codeausschnitte.For more information, see Code Snippets.

C++ „Ausschnitt einfügen“-DropdownC++ Insert Snippet Drop-down

Klasse hinzufügenAdd Class

Über das Menü Projekt oder über das Kontextmenü im Projektmappen-Explorer können Sie eine neue Klasse hinzufügen:Add a new class from the Project menu, or from the context menu in Solution Explorer :

Neue Klasse in C++ hinzufügenAdd New Class in C++

Sie können auch den Klassen-Assistenten verwenden, um eine vorhandene Klasse zu ändern oder zu untersuchen.You can also use Class Wizard to modify or examine an existing class.

C++-Klassen-Assistent

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

UmgestaltungRefactoring

Refactorings stehen unter dem Kontextmenü „Schnelle Aktion“ oder durch Klicken auf eine Glühbirne im Editor zur Verfügung.Refactorings are available under the Quick Action context menu, or by clicking on a light bulb in the editor. Einige befinden sich auch im Menü Bearbeiten > Umgestalten.Some are also found in the Edit > Refactor menu. Zu diesen Features zählen:These features include:

Erzwingung von Codeformat mit ClangFormat und EditorConfigCode style enforcement with ClangFormat and 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.Visual Studio 2017 and later comes with built-in support for ClangFormat, a popular code-formatting utility for C++ based on Clang/LLVM. Geben Sie „ClangFormat“ in den Schnellstart ein, um festzulegen, welches der folgenden gängigen Formate es verwenden soll:Type "ClangFormat" into Quick Launch to set it to use one of these common formats:

  • LLVMLLVM
  • GoogleGoogle
  • ChromiumChromium
  • MozillaMozilla
  • WebKitWebKit
  • Visual StudioVisual Studio

Sie können auch Ihr eigenes CLANG-Format oder eine _clang-format-Datei angeben, um benutzerdefinierte Regeln auf alle Codedateien auf der gleichen Ebene oder auf einer niedrigeren Ebene anzuwenden.You can also provide your own .clang-format or _clang-format file to apply custom rules to all code files at the same level or below.

Die Dateien können über die Quellcodeverwaltung leicht freigegeben werden, sodass Sie Programmierkonventionen in Ihrem gesamten Entwicklungsteam erzwingen können.The files are easily shareable via source control, so you can enforce coding conventions across your whole development team.

C++ ClangFormatC++ Clang Format

Visual Studio 2017 und höher unterstützt zudem EditorConfig, welches ähnlich funktioniert.Visual Studio 2017 and later also supports EditorConfig, which works in a similar way. ClangFormat hat jedoch mehr Formatoptionen als EditorConfig, z. B. auch C++-spezifische Regeln.ClangFormat, however, has more style options than EditorConfig, including rules that are specific to C++. 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.With EditorConfig , you create .editorconfig files and place them in different folders of your codebase to specify code styles for those folders and their subfolders. Eine EDITORCONFIG -Datei ersetzt alle anderen EDITORCONFIG -Dateien in übergeordneten Ordnern und überschreibt alle Formatierungseinstellungen, die über Extras > Optionen vorgenommen wurden.An .editorconfig file supersedes any other .editorconfig files in parent folders and overwrites any formatting settings configured via Tools > Options. Sie können z. B. Regeln für Tabs, Leerzeichen und Einzugsgröße festlegen.You can set rules for tabs vs. spaces, indent size, and more. Weitere Informationen finden Sie unter Create portable, custom editor settings with EditorConfig (Erstellen von portablen, benutzerdefinierten Editor-Einstellungen mit EditorConfig).For more information, see Create portable, custom editor settings with EditorConfig.

Andere FormatierungsoptionenOther formatting options

Über das Schnellstart -Suchfeld können Sie eine Einstellung oder ein Tool am schnellsten finden.The Quick Launch search box provides the fastest way to find a setting or tool. Das Feld befindet sich im Hauptmenü.It is located on the main menu. Beginnen Sie mit der Eingabe, und die Autovervollständigungsliste filtert die Ergebnisse.Just start typing and the auto-completion list will filter the results.

Visual Studio-SchnellstartVisual Studio Quick Launch

Geben Sie zum Festlegen von Formatierungsoptionen, z. B. Einzügen, Klammerabschluss und Farbgebung, „C++-Formatierung“ im Fenster Schnellstart ein.To set formatting options such as indents, brace completion, and colorization, type "C++ Formatting" into the Quick Launch window.

C++-Formatierungsoptionen

Andere Formatierungsoptionen finden Sie unter Bearbeiten > Erweitert im Hauptmenü.Other formatting options are found under Edit > Advanced in the main menu.

Erweiterte C++-Bearbeitungsfunktionen

Optionen zum Aktivieren und Konfigurieren von C++-spezifischen Bearbeitungsfeatures finden Sie unter Extras > Optionen > Text-Editor > C/C++ .Options for enabling and configuring C++-specific editing features are located under Tools > Options > 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.After choosing which option you want to set, you can get more help by pressing F1 when the dialog is in focus. Geben Sie Editor C++ in den Schnellstart ein, um allgemeine Codeformatierungsoptionen abzurufen.For general code formatting options, type Editor C++ into Quick Launch.

Visual Studio-Tools > OptionenVisual Studio Tools > Options

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“).Experimental features, which may or may not be included in a future version of Visual Studio, are found in the Text Editor C++ Experimental dialog. In Visual Studio 2017 und höher können Sie Predictive IntelliSense in diesem Dialogfeld aktivieren.In Visual Studio 2017 and later you can enable Predictive IntelliSense in this dialog.

Siehe auchSee Also

Read and understand C++ code (Lesen und Verstehen von C++-Code)Read and understand C++ code
Navigate your C++ code base in Visual Studio (Navigieren in Ihrer C++-Codebasis in Visual Studio)Navigate your C++ code base in Visual Studio
Collaborate with Live Share for C++ (Zusammenarbeit über Live Share für C++)Collaborate with Live Share for C++