Freigeben über


Analysieren der Qualität des C++-Codes von Store-Apps mit der statischen Codeanalyse von Visual Studio

Gilt für Windows und Windows Phone

Das Codeanalysetool in Visual Studio Express-Editionen überprüft den Code auf eine Reihe von allgemeinen Fehlern und auf Verstöße gegen gebräuchliche Programmiergrundlagen. Codeanalysewarnungen unterscheiden sich von Compilerfehlern und -warnungen, da die Codeanalyse nach bestimmten Codeschemata sucht, die gültig sind, jedoch Probleme für Sie oder andere Personen bereiten können, die den Code verwenden. Codeanalyse kann auch Fehler im Code suchen, die schwierig durch Tests zu erkennen sind. Das regelmäßige Ausführen des Codeanalysetools während des Entwicklungsprozesses kann die Qualität der App erhöhen.

Hinweis

In Visual Studio Ultimate, Visual Studio Premium und Visual Studio Professional können Sie sämtliche Funktionen der Codeanalysetools verwenden.Weitere Informationen finden Sie unter Analysieren der Anwendungsqualität mit Codeanalysetools in der MSDN Library.

In diesem Thema

Erfahren Sie:

Ausführen der Codeanalyse

Analysieren und Auflösen von Codeanalysewarnungen

Unterdrücken der Codeanalysewarnungen

Suchen und Filtern der Codeanalyseergebnisse

C++ code analysis warnings

Ausführen der Codeanalyse

So führen Sie die Codeanalyse in der Visual Studio-Projektmappe aus

  • Wählen Sie im Menü Erstellen die Option Codeanalyse für Lösung ausführen aus.

So führen Sie die Codeanalyse beim Erstellen eines Projekts jedes Mal automatisch aus

  1. Wählen Sie im Projektmappen-Explorer den Projektnamen und dann Eigenschaften aus.

  2. Wählen Sie auf der Seite der Projekteigenschaften Codeanalyse aus, und wählen Sie dann Codeanalyse für C/C++ auf Build aktivieren aus.

Die Projektmappe wird kompiliert und die Codeanalyse ausgeführt. Die Ergebnisse werden im Codeanalysefenster angezeigt.

Codeanalysefenster

Analysieren und Auflösen von Codeanalysewarnungen

Um eine bestimmte Warnung zu analysieren, wählen Sie im Codeanalysefenster den Titel der Warnung aus. Die Warnung wird erweitert, um ausführliche Informationen zum Problem anzuzeigen. Wenn möglich, zeigt die Codeanalyse die Zeilennummer und die Analyselogik an, die zu der Warnung geführt haben.

Erweiterte Codeanalysewarnung

Wenn Sie eine Warnung erweitern, werden die Codezeilen, die die Warnung verursacht haben, im Visual Studio-Code-Editor hervorgehoben.

Hervorgehobener Quellcode

Nachdem Sie das Problem verstanden haben, können Sie es im Code beheben. Wiederholen Sie dann die Codeanalyse, um sicherzustellen, dass die Warnung nicht mehr im Codeanalysefenster angezeigt wird, und dass durch die Korrektur keine neuen Warnungen ausgelöst wurden.

Tipp

Sie können die Codeanalyse im Codeanalysefenster erneut ausführen.Klicken Sie auf die Schaltfläche Analysieren, und wählen Sie dann den Bereich der Analyse aus.Sie können die Analyse für die gesamte Projektmappe oder für ein ausgewähltes Projekt erneut ausführen.

Unterdrücken der Codeanalysewarnungen

Mitunter möchten Sie möglicherweise darauf verzichten, eine Codeanalysewarnung zu korrigieren. So kann es beispielsweise vorkommen, dass das Auflösen der Warnung im Verhältnis zur Wahrscheinlichkeit, dass das Problem in einer realen Implementierung des Codes auftritt, eine zu große Bearbeitung des Codes erfordert. Oder Sie gehen davon aus, dass die für die Warnung verwendete Analyse für den jeweiligen Kontext ungeeignet ist. Sie können Warnungen unterdrücken, sodass diese nicht mehr im Codeanalysefenster angezeigt werden.

So unterdrücken Sie eine Warnung

  1. Wenn die ausführlichen Informationen nicht angezeigt werden, erweitern Sie den Titel der Warnung.

  2. Wählen Sie unten in der Warnung den Link Aktionen aus.

  3. Wählen Sie Meldung unterdrücken und dann In Quelle aus.

Durch das Unterdrücken einer Meldung wird #pragma(warning:WarningId) eingefügt, das die Warnung für die Codezeile unterdrückt.

Suchen und Filtern der Codeanalyseergebnisse

Sie können lange Listen mit Warnmeldungen durchsuchen und Warnungen in Projektmappen mit mehreren Projekten filtern.

Fenster zum Suchen und Filtern der Codeanalyse

C++-Codeanalysewarnungen

Die Codeanalyse gibt die folgenden Warnungen für C++-Code aus:

Regel

Beschreibung

C6001

Nicht initialisierter Speicher wird verwendet

C6011

Dereferenzierender NULL-Zeiger

C6029

Verwendung von ungeprüftem Wert

C6053

0 (null)-Abbruch des Aufrufs

C6059

Fehlerhafte Verkettung

C6063

Fehlendes Zeichenfolgenargument für Formatfunktion

C6064

Fehlendes Ganzzahlargument für Formatfunktion

C6066

Fehlendes Zeigerargument für Formatfunktion

C6067

Fehlendes Zeichenfolgenzeigerargument für Formatfunktion

C6101

Rückgabe von nicht initialisiertem Speicher

C6200

Index überschreitet maximale Puffergröße

C6201

Index überschreitet maximale Puffergröße

C6270

Fehlendes Gleitkommaargument für Formatfunktion

C6271

Zusätzliches Argument für Formatfunktion

C6272

Nicht-Gleitkommaargument für Formatfunktion

C6273

Nicht-Ganzzahlargument für Formatfunktion

C6274

Nicht-Zeichenargument für Formatfunktion

C6276

Ungültige Zeichenfolgenumwandlung

C6277

Ungültiger CreateProcess-Aufruf

C6284

Ungültiges Objekt-Argument für Formatfunktion

C6290

Logischer NOT-Operator hat Vorrang gegenüber bitweisem AND-Operator

C6291

Logischer NOT-Operator hat Vorrang gegenüber bitweisem OR-Operator

C6302

Ungültiges Zeichenfolgenargument für Formatfunktion

C6303

Ungültiges Zeichenfolgenargument für breite Zeichen zu Formatfunktion

C6305

Keine Übereinstimmung bei Größe und Count-Verwendung

C6306

Falscher Variablenargument-Funktionsaufruf

C6328

Möglicher Argumenttypenkonflikt

C6385

Leseüberlauf

C6386

Schreibüberlauf

C6387

Ungültiger Parameterwert

C6500

Ungültige Attributeigenschaft

C6501

In Konflikt stehende Attributeigenschaftswerte

C6503

Verweise dürfen nicht NULL sein.

C6504

NULL auf Nichtzeiger

C6505

MustCheck für "void"

C6506

Puffergröße auf Nichtzeiger oder Array

C6507

NULL-Konflikt bei 0 Dereferenzierung

C6508

Schreibzugriff auf Konstante

C6509

Rückgabe wurde für Vorbedingung verwendet

C6510

NULL für Nichtzeiger abgebrochen

C6511

MustCheck Muss "Ja" oder "Nein" lauten

C6513

Elementgröße ohne Puffergröße

C6514

Puffergröße übersteigt Arraygröße

C6515

Puffergröße auf Nichtzeiger

C6516

Keine Eigenschaften für Attribut

C6517

Zulässige Größe für nicht lesbaren Puffer

C6518

Schreibbare Größe für Puffer, der nicht geschrieben werden kann

C6519

Ungültige Anmerkung: Wert für die Eigenschaft "NeedsRelease" muss "Ja" oder "Nein" sein

C6521

Ungültige Größenzeichenfolgendereferenzierung

C6522

Ungültiger Größenzeichenfolgentyp

C6523

Ungültiger Größenzeichenfolgenparameter

C6525

Ungültiger Größenzeichenfolgenstandort

C6526

Ungültiger Größenzeichenfolgen-Puffertyp

C6527

Ungültige Anmerkung: Die 'NeedsRelease'-Eigenschaft kann nicht für Werte des void-Typs verwendet werden.

C6530

Unbekannter Formatzeichenfolgenstil

C6540

Bei Verwendung von Attributanmerkungen für diese Funktion werden alle vorhandenen, zugehörigen __declspec-Anmerkungen ungültig

C6551

Ungültige Größenangabe: Ausdruck nicht analysierbar

C6552

Ungültiger Deref= oder Notref=: Ausdruck nicht analysierbar

C6701

Der Wert ist kein gültiger Yes/No/Maybe-Wert

C6702

Der Wert ist kein Zeichenfolgenwert

C6703

Der Wert ist keine Zahl

C6704

Unerwarteter Ausdrucksfehler der Anmerkung

C6705

Erwartete Anzahl von Argumenten für die Anmerkung stimmt nicht mit tatsächlicher Anzahl von Argumenten für die Anmerkung überein

C6706

Unerwarteter Anmerkungsfehler für Anmerkung

C28021

Der mit einer Anmerkung zu versehende Parameter muss ein Zeiger sein.

C28182

Dereferenzierender NULL-Zeiger. Der Zeit enthält denselben NULL-Wert wie ein anderer Zeiger.

C28202

Illegaler Verweis auf nicht statischen Member

C28203

Mehrdeutiger Verweis auf Klassenmember.

C28205

_Success_ or _On_failure_ wurde in einem illegalen Kontext verwendet.

C28206

'->' verwenden, wenn linker Operand auf eine Struktur zeigt

C28207

'.' verwenden, wenn linker Operand eine Struktur ist

C28210

Anmerkungen für den _On_failure_-Kontext dürfen sich nicht im expliziten Vorkontext befinden.

C28211

Statischer Kontextname für SAL_context erwartet

C28212

Zeigerausdruck für Anmerkung erwartet

C28213

Die _Use_decl_annotations_-Anmerkung muss ohne Änderung zum Verweisen auf eine vorherige Deklaration verwendet werden.

C28214

Attributparameternamen müssen p1...p9 sein.

C28215

Der Typefix kann nicht auf einen Parameter angewendet werden, der bereits über einen Typefix verfügt.

C28216

Die checkReturn-Anmerkung gilt nur für Nachbedingungen für den bestimmten Funktionsparameter.

C28217

Für die Funktion stimmt die Anzahl der Parameter für die Anmerkung nicht mit der in der Datei gefundenen überein

C28218

Für den Funktionsparameter stimmt der Parameter der Anwendung nicht mit dem in der Datei gefundenen überein

C28219

Member von Enumeration für den Parameter in der Anmerkung erwartet

C28220

Für den Parameter in der Anmerkung erwarteter Ganzzahlausdruck

C28221

Für den Parameter in der Anmerkung erwarteter Zeichenfolgeausdruck

C28222

__yes, __no oder __maybe für die Anmerkung erwartet

C28223

Erwartetes Token/Bezeichner für Anmerkung, Parameter nicht gefunden

C28224

Anmerkung erfordert Parameter

C28225

Korrekte Anzahl erforderlicher Parameter konnten in Anmerkung nicht gefunden werden

C28226

Anmerkung kann nicht zusätzlich ein PrimOp sein (in der aktuellen Deklaration).

C28227

Anmerkung kann nicht zusätzlich ein PrimOp sein (siehe vorherige Deklaration).

C28228

Anmerkungsparameter: Typ kann nicht in Anmerkungen verwendet werden.

C28229

Anmerkung unterstützt keine Parameter.

C28230

Der Parametertyp weist keinen Member auf.

C28231

Anmerkung ist nur im Array gültig.

C28232

Pre, post oder deref wurden auf keine Anmerkung angewendet.

C28233

Pre, post oder deref wurden auf einen Block angewendet.

C28234

_At_-Ausdruck gilt nicht für die aktuelle Funktion.

C28235

Die Funktion kann nicht als Anmerkung alleine stehen.

C28236

Die Anmerkung kann nicht in einem Ausdruck verwendet werden.

C28237

Die Anmerkung zum Parameter wird nicht mehr unterstützt.

C28238

Die Anmerkung zum Parameter verfügt über mehrere Werte vom Typ "value", "stringValue" und "longValue". Verwenden Sie paramn=xxx.

C28239

Für die Anmerkung zum Parameter wurden sowohl value, stringValue oder longValue sowie paramn=xxx definiert. Verwenden Sie nur paramn=xxx.

C28240

Die Anmerkung zum Parameter verfügt über param2, jedoch nicht über param1.

C28241

Die Anmerkung für die Funktion zum Parameter wird nicht erkannt.

C28243

Die Anmerkung für die Funktion zum Parameter erfordert eine größere Anzahl von Dereferenzierungen, als der derzeit angemerkte Typ zulässt.

C28245

Die Anmerkung für die Funktion merkt "this" in einer Nicht-Member-Funktion an.

C28246

Die Parameteranmerkung für die Funktion stimmt nicht mit dem Parametertyp überein.

C28250

Inkonsistente Anmerkung für die Funktion: die vorherige Instanz weist einen Fehler auf.

C28251

Inkonsistente Anmerkung für die Funktion: diese Instanz weist einen Fehler auf.

C28252

Inkonsistente Anmerkung für die Funktion: der Parameter weist andere Anmerkungen für diese Instanz auf.

C28253

Inkonsistente Anmerkung für die Funktion: der Parameter weist andere Anmerkungen für diese Instanz auf.

C28254

dynamic_cast<>() wird in Anmerkungen nicht unterstützt.

C28262

Ein Syntaxfehler in der Anmerkung wurde in der Funktion für Anmerkung gefunden

C28263

Ein Syntaxfehler in einer bedingten Anmerkung wurde gefunden für systeminterne Anmerkung

C28264

Ergebnislistenwerte müssen Konstanten sein.

C28267

Ein Syntaxfehler in den Anmerkungen wurde in Anmerkung in der Funktion gefunden.

C28272

Die Anmerkung für Funktion, Parameter, beim Untersuchen von ist inkonsistent mit der Funktionsdeklaration.

C28273

Für Funktion sind die Hinweise inkonsistent mit der Funktionsdeklaration.

C28275

Der Parameter für _Macro_value_ ist Null

C28279

Für Symbol wurde ein 'begin' ohne zugehöriges 'end' gefunden.

C28280

Für Symbol wurde ein 'end' ohne zugehöriges 'begin' gefunden.

C28282

Formatzeichenfolgen müssen sich in Vorbedingungen befinden

C28285

Syntaxfehler im Parameter für Funktion

C28286

Für Funktion wurde ein Syntaxfehler gegen Ende gefunden.

C28287

Für Funktion Syntaxfehler in _At_()-Anmerkung (unbekannter Parametername)

C28288

Für Funktion Syntaxfehler in _At_()-Anmerkung (ungültiger Parametername)

C28289

Für Funktion: ReadableTo oder WritableTo enthielt keine Begrenzungsangabe als Parameter.

C28290

Die Anmerkung für Funktion enthält mehr Externe als die tatsächliche Anzahl von Parametern.

C28291

Post null/notnull auf deref-Ebene 0 ist ohne Bedeutung für Funktion.

C28300

Ausdrucksoperanden von inkompatiblen Typen für Operator

C28301

Keine Anmerkungen für die erste Deklaration der Funktion.

C28302

Ein zusätzlicher _Deref_-Operator wurde in der Anmerkung gefunden.

C28303

Ein mehrdeutiger _Deref_-Operator wurde in der Anmerkung gefunden.

C28304

Ein falsch platzierter _Notref_-Operator wurde gefunden, der auf das Token angewendet wird.

C28305

Fehler beim Analysieren eines Token.

C28350

Die Anmerkung beschreibt eine Situation, die nicht bedingt anwendbar ist.

C28351

Die Anmerkung beschreibt, wo ein dynamischer Wert (eine Variable) in der Bedingung nicht verwendet werden darf.