Freigeben über


Analysieren der Codequalität von C++ bei Windows Store-Apps mit Visual Studio-Codeanalyse

Das Codeanalysetool in Microsoft Visual Studio Express 2012 für Windows 8 überprüft den Code auf eine Reihe von allgemeinen Problemen und Verstößen gegen gebräuchliche Programmiergrundlagen. Codeanalysewarnungen unterscheiden sich von C#-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 2012, Visual Studio Premium 2012 und Visual Studio Professional 2012 können Sie die Codeanalysefunktion verwenden. Siehe 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++-Codeanalysewarnungen

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++ beim Erstellen 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, werden für die Codeanalyse die Zeilennummer und Analyselogik angezeigt, die zu der Warnung führten.

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 die Ursache des Problems 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. Wählen Sie die Schaltfläche Analysieren und anschließend 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.

Beim Unterdrücken einer Meldung wird #pragma(warning:WarningId) hinzugefügt, um die Warnung für die Codezeile zu unterdrücken.

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 löst 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 ganzzahliges Argument für Formatfunktion

C6274

Nicht-Zeichenargument für Formatfunktion

C6276

Ungültige Zeichenfolgenumwandlung

C6277

Ungültiger CreateProcess-Aufruf

C6284

Ungültiges Objektargument 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ültige Zeichenfolgenargument mit Breitzeichen für Formatfunktion

C6305

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

C6306

Falscher Variablenargument-Funktionsaufruf

C6328

Möglicherweise keine Übereinstimmung zwischen Argument und Typ

C6385

Leseüberlauf

C6386

Schreibüberlauf

C6387

Ungültiger Parameterwert

C6500

Ungültige Attributeigenschaft

C6501

In Konflikt stehende Attributeigenschaftswerte

C6503

Verweis darf nicht null sein

C6504

NULL auf Nichtzeiger

C6505

MustCheck für "void"

C6506

Puffergröße auf Nichtzeiger oder Array

C6507

NULL-Konflikt bei Dereferenzierungs-NULL

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 überschreitet 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: Der Wert der 'NeedsRelease'-Eigenschaft muss "Ja" oder "Nein" lauten

C6521

Ungültige Größe der Zeichenfolgendereferenzierung

C6522

Ungültige Größe des Zeichenfolgentyps

C6523

Ungültiger Größe des Zeichenfolgenparameters

C6525

Ungültiger Größenzeichenfolgenstandort

C6526

Ungültige Größe des Zeichenfolgenpuffertyps

C6527

Ungültige Anmerkung: Die "NeedsRelease"-Eigenschaft darf nicht für Werte vom Typ "void" 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 Ja-/Nein-/Vielleichtwert

C6702

Der Wert ist kein Zeichenfolgenwert

C6703

Der Wert ist keine Zahl

C6704

Unerwarteter Anmerkungsausdruckfehler

C6705

Die erwartete Anzahl an Argumenten für die Anmerkung entspricht nicht der tatsächlichen Anzahl von Argumenten für die Anmerkung

C6706

Unerwarteter Anmerkungsfehler für Anmerkung

C28021

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

C28182

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

C28202

Illegaler Verweis auf nicht statischen Member.

C28203

Mehrdeutiger Verweis auf Klassenmember.

C28205

_Success_ oder _On_failure_ wurde in einem illegalen Kontext verwendet.

C28206

Linker Operand zeigt auf eine Struktur, verwenden Sie '->'

C28207

Linker Operand ist eine Struktur, verwenden Sie '.'

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 jeweiligen Funktionsparameter.

C28217

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

C28218

Bei dem Funktionsparameter stimmt der Anmerkungsparameter nicht mit dem in der Datei gefundenen überein

C28219

Member der Enumeration für Anmerkung des Parameters in der Anmerkung erwartet

C28220

Ganzzahlausdruck für Anmerkung des Parameters in der Anmerkung erwartet

C28221

Zeichenfolgenausdruck für den Parameter in der Anmerkung erwartet

C28222

__yes, __no oder __maybe für die Anmerkung erwartet.

C28223

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

C28224

Anmerkung erfordert Parameter

C28225

In der Anmerkung wurde nicht die richtige Anzahl an Parametern gefunden

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

Anmerkungsparamater: Typ kann nicht in Anmerkungen verwendet werden.

C28229

Anmerkung unterstützt keine Parameter.

C28230

Der Paramatertyp verfügt über keinen Member.

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 für den Parameter wird nicht mehr unterstützt

C28238

Die Anmerkung für den Parameter verfügt über mehrere Werte vom Typ 'value', 'stringValue' und 'longValue'. Verwenden Sie paramn=xxx

C28239

Die Anmerkung für den Parameter verfügt über 'value', 'stringValue' oder 'longValue' sowie 'paramn=xxx'. Verwenden Sie nur paramn=xxx

C28240

Die Anmerkung für den Parameter verfügt über 'param2', jedoch nicht über 'param1'

C28241

Die Anmerkung für die Funktion des Parameters wird nicht erkannt

C28243

Die Anmerkung für die Funktion des Parameters erfordert mehr Dereferenzierungen als der tatsächliche mit Anmerkungen versehene 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 Typ des Parameters ü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 verfügt in dieser Instanz über andere Anmerkungen.

C28253

Inkonsistente Anmerkung für die Funktion: der Parameter verfügt in dieser Instanz über andere Anmerkungen.

C28254

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

C28262

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

C28263

Ein Syntaxfehler in einer bedingten Anmerkung wurde für die Systeminterne Anmerkung gefunden

C28264

Ergebnislistenwerte müssen Konstanten sein.

C28267

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

C28272

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

C28273

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

C28275

Der Parameter zu _Macro_value_ ist NULL.

C28279

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

C28280

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

C28282

Formatzeichenfolgen müssen sich in Vorbedingungen befinden

C28285

Syntaxfehler im Parameter der Funktion

C28286

Syntaxfehler am Ende der Funktion

C28287

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

C28288

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

C28289

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

C28290

Die Anmerkung für die 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 die 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 auf den Token angewendet.

C28305

Beim Analysieren eines Tokens wurde ein Fehler entdeckt.

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.