Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här genomgången visar hur du analyserar C/C++-kod för potentiella kodfel. Den använder kodanalysverktygen för C/C++-kod.
I den här genomgången gör du följande:
- Kör kodanalys på intern kod.
- Analysera varningar om kodfel.
- Behandla varningen som ett fel.
- Kommentera källkoden för att förbättra kodfelanalysen.
Förutsättningar
- En kopia av CppDemo-exemplet.
- Grundläggande förståelse för C/C++.
Köra kodanalys på intern kod
Så här kör du kodfelanalys på intern kod
Öppna CppDemo-lösningen i Visual Studio.
CppDemo-lösningen fyller nu i Solution Explorer.
På menyn Skapa väljer du Återskapa lösning.
Lösningen skapas utan fel eller varningar.
I Solution Explorer väljer du projektet CodeDefects.
På Projekt-menyn väljer du Egenskaper.
Dialogrutan CodeDefects Property Pages visas.
Välj egenskapssidan Kodanalys .
Ändra egenskapen Aktivera kodanalys på build till Ja. Välj OK för att spara ändringarna.
Återskapa CodeDefects-projektet.
Kodanalysvarningar visas i fönstret Fellista .
Öppna CppDemo-lösningen i Visual Studio.
CppDemo-lösningen fyller nu i Solution Explorer.
På menyn Skapa väljer du Återskapa lösning.
Lösningen skapas utan fel eller varningar.
Anmärkning
I Visual Studio 2017 kan du se en falsk varning
E1097 unknown attribute "no_init_all"i IntelliSense-motorn. Du kan ignorera den här varningen.I Solution Explorer väljer du projektet CodeDefects.
På Projekt-menyn väljer du Egenskaper.
Dialogrutan CodeDefects Property Pages visas.
Välj egenskapssidan Kodanalys .
Markera kryssrutan Aktivera kodanalys på build . Välj OK för att spara ändringarna.
Återskapa CodeDefects-projektet.
Kodanalysvarningar visas i fönstret Fellista .
Så här analyserar du varningar om kodfel
På menyn Visa väljer du Fellista.
Det här menyalternativet kanske inte är synligt. Det beror på vilken utvecklarprofil du valde i Visual Studio. Du kan behöva peka på Andra Windows på menyn Visa och sedan välja Fellista.
Dubbelklicka på följande varning i fönstret Fellista :
C6230: Implicit konvertering mellan semantiskt olika typer: användning av HRESULT i ett booleskt sammanhang.
Kodredigeraren visar den rad som orsakade varningen i funktionen
bool ProcessDomain(). Den här varningen anger att enHRESULTanvänds i en if-instruktion där ett booleskt resultat förväntas. Det är vanligtvis ett misstag, eftersom närS_OKHRESULT returneras från en funktion indikerar det framgång, men när det konverteras till ett booleskt värde utvärderas det tillfalse.Korrigera den här varningen med hjälp av
SUCCEEDEDmakrot, som konverteras tilltruenär ettHRESULTreturvärde indikerar framgång. Koden bör likna följande kod:if (SUCCEEDED(ReadUserAccount()))Dubbelklicka på följande varning i fellistan:
C6282: Felaktig operator: tilldelning av konstant i boolesk kontext. Överväg att använda '==' i stället.
Korrigera den här varningen genom att testa för likhet. Koden bör se ut ungefär så här:
if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))Korrigera de återstående C6001-varningarna i fellistan genom att initiera
iochjtill 0.Återskapa CodeDefects-projektet.
Projektet byggs utan varningar eller fel.
Korrigera varningar om källkodsanteckningar
Så här aktiverar du varningar om källkodskommentarer i annotation.c
I Solution Explorer väljer du projektet Anteckningar.
På Projekt-menyn väljer du Egenskaper.
Dialogrutan Egenskapssidor för anteckningar visas.
Välj egenskapssidan Kodanalys .
Ändra egenskapen Aktivera kodanalys på build till Ja. Välj OK för att spara ändringarna.
I Solution Explorer väljer du projektet Anteckningar.
På Projekt-menyn väljer du Egenskaper.
Dialogrutan Egenskapssidor för anteckningar visas.
Välj egenskapssidan Kodanalys .
Markera kryssrutan Aktivera kodanalys på build . Välj OK för att spara ändringarna.
Så här korrigerar du varningar om källkodsanteckningar i anteckningar.c
Återskapa annoteringsprojektet.
På menyn Skapa väljer du Kör kodanalys på anteckningar.
Dubbelklicka på följande varning i fellistan:
C6011: Dereferensiering av NULL-pekare "newNode".
Den här varningen anger att anroparen inte har kontrollerat returvärdet. I det här fallet kan ett anrop till
AllocateNodereturnera ett NULL-värde. Se rubrikfilen annotations.h för funktionsdeklarationen förAllocateNode.Markören finns på platsen i filen annotations.cpp där varningen inträffade.
Om du vill korrigera den här varningen använder du en if-instruktion för att testa returvärdet. Koden bör likna följande kod:
LinkedList* newNode = AllocateNode(); if (nullptr != newNode) { newNode->data = value; newNode->next = 0; node->next = newNode; }Återskapa annoteringsprojektet.
Projektet byggs utan varningar eller fel.
Använda källkodsanteckning för att identifiera fler problem
Så här använder du källkodsanteckning
Kommentera formella parametrar och returvärdet för funktionen
AddTailför att indikera att pekarvärdena kan vara null:_Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)På menyn Skapa väljer du Kör kodanalys på lösning.
Dubbelklicka på följande varning i fellistan:
C6011: Avreferering av NULL-pekare "node".
Den här varningen anger att noden som skickas till funktionen kan vara null.
Du korrigerar den här varningen genom att använda en if-instruktion i början av funktionen för att testa det angivna värdet. Koden bör likna följande kod:
if (nullptr == node) { return nullptr; }På menyn Skapa väljer du Kör kodanalys på lösning.
Projektet byggs nu utan varningar eller fel.
Se även
Genomgång: Analysera hanterad kod för kodfel
Kodanalys för C/C++