Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
In dit scenario ziet u hoe u C/C++-code analyseert op mogelijke codefouten. Het maakt gebruik van de hulpprogramma's voor codeanalyse voor C/C++-code.
In deze handleiding gaat u het volgende doen:
- Voer codeanalyse uit op systeemeigen code.
- Waarschuwingen voor codefouten analyseren.
- Waarschuwing behandelen als een fout.
- Aantekeningen toevoegen aan broncode om de analyse van codefouten te verbeteren.
Vereiste voorwaarden
- Een kopie van het CppDemo-voorbeeld.
- Basiskennis van C/C++.
Codeanalyse uitvoeren op systeemeigen code
Een analyse van codefouten uitvoeren op systeemeigen code
Open de CppDemo-oplossing in Visual Studio.
De CppDemo-oplossing wordt nu weergegeven in Solution Explorer.
Kies In het menu Opbouwende optie Oplossing opnieuw opbouwen.
De oplossing bouwt zonder fouten of waarschuwingen.
Selecteer in Solution Explorer het Project CodeDefects.
Kies Eigenschappen in het menu Project.
Het dialoogvenster Eigenschappenpagina's van CodeDefects wordt weergegeven.
Kies de eigenschapspagina codeanalyse.
Wijzig de eigenschap Codeanalyse bij build inschakelen in Ja. Kies OK- om uw wijzigingen op te slaan.
Bouw het CodeDefects-project opnieuw.
Waarschuwingen voor codeanalyse worden weergegeven in het venster Foutenlijst .
Open de CppDemo-oplossing in Visual Studio.
De CppDemo-oplossing wordt nu weergegeven in Solution Explorer.
Kies In het menu Opbouwende optie Oplossing opnieuw opbouwen.
De oplossing bouwt zonder fouten of waarschuwingen.
Opmerking
In Visual Studio 2017 ziet u mogelijk een valse waarschuwing
E1097 unknown attribute "no_init_all"in de IntelliSense-engine. U mag dit bericht negeren.Selecteer in Solution Explorer het Project CodeDefects.
Kies Eigenschappen in het menu Project.
Het dialoogvenster Eigenschappenpagina's van CodeDefects wordt weergegeven.
Kies de eigenschapspagina codeanalyse.
Schakel het selectievakje Codeanalyse inschakelen in build in. Kies OK- om uw wijzigingen op te slaan.
Bouw het CodeDefects-project opnieuw.
Waarschuwingen voor codeanalyse worden weergegeven in het venster Foutenlijst .
Waarschuwingen voor codefouten analyseren
Kies in het menu Beeld de optie Lijst met fouten.
Dit menu-item is mogelijk niet zichtbaar. Dit is afhankelijk van het ontwikkelaarsprofiel dat u hebt gekozen in Visual Studio. Mogelijk moet u andere vensters in het menu Beeld aanwijzen en vervolgens Foutenlijst kiezen.
Dubbelklik in het venster Foutenlijst op de volgende waarschuwing:
C6230: Impliciete cast tussen semantisch verschillende typen: hresult gebruiken in een Booleaanse context.
De code-editor geeft de regel weer die de waarschuwing in de functie
bool ProcessDomain()heeft veroorzaakt. Deze waarschuwing geeft aan dat eenHRESULTwordt gebruikt in een if-instructie waarbij een Booleaanse resultaat wordt verwacht. Dit is meestal een fout, omdat wanneer hetS_OKHRESULT van een functie wordt geretourneerd, dit succes aangeeft, maar wanneer het wordt omgezet naar een booleaanse waarde, dit naarfalseevalueert.Corrigeer deze waarschuwing door de
SUCCEEDEDmacro te gebruiken, die bij een succesvolle retourwaarde wordt omgezet naartrue. Uw code moet er ongeveer als volgt uitzien:if (SUCCEEDED(ReadUserAccount()))Dubbelklik in de lijst met fouten op de volgende waarschuwing:
C6282: Onjuiste operator: toewijzing van constante in Booleaanse context. Overweeg in plaats daarvan '=' te gebruiken.
Corrigeer deze waarschuwing door te testen op gelijkheid. Uw code moet er ongeveer uitzien als de volgende code:
if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))Corrigeer de resterende C6001-waarschuwingen in de foutenlijst door te initialiseren
ienjtot 0.Bouw het CodeDefects-project opnieuw.
Het project bouwt zonder waarschuwingen of fouten.
Aantekeningswaarschuwingen voor broncode corrigeren
De annotatiewaarschuwingen voor de broncode inschakelen in annotation.c
Selecteer in Solution Explorer het project Aantekeningen.
Kies Eigenschappen in het menu Project.
Het dialoogvenster Eigenschappen van annotatiespagina's wordt weergegeven.
Kies de eigenschapspagina codeanalyse.
Wijzig de eigenschap Codeanalyse bij build inschakelen in Ja. Kies OK- om uw wijzigingen op te slaan.
Selecteer in Solution Explorer het project Aantekeningen.
Kies Eigenschappen in het menu Project.
Het dialoogvenster Eigenschappen van annotatiespagina's wordt weergegeven.
Kies de eigenschapspagina codeanalyse.
Schakel het selectievakje Codeanalyse inschakelen in build in. Kies OK- om uw wijzigingen op te slaan.
De annotatiewaarschuwingen in de broncode corrigeren in het bestand annotation.c
Bouw het project Aantekeningen opnieuw.
Op het menu Opbouwen kies Voer codeanalyse uit op annotaties.
Dubbelklik in de lijst met fouten op de volgende waarschuwing:
C6011: Dereferencing NULL-aanwijzer 'newNode'.
Deze waarschuwing geeft aan dat de aanroeper de retourwaarde niet heeft gecontroleerd. In dit geval kan een oproep naar
AllocateNodeeen NULL-waarde teruggeven. Zie het headerbestand annotaations.h voor de functiedeclaratie voorAllocateNode.De cursor bevindt zich op de locatie in het annotations.cpp-bestand waar de waarschuwing is opgetreden.
Als u deze waarschuwing wilt corrigeren, gebruikt u een if-instructie om de retourwaarde te testen. Uw code moet er ongeveer als volgt uitzien:
LinkedList* newNode = AllocateNode(); if (nullptr != newNode) { newNode->data = value; newNode->next = 0; node->next = newNode; }Bouw het project Aantekeningen opnieuw.
Het project bouwt zonder waarschuwingen of fouten.
Broncodeaantekening gebruiken om meer problemen te detecteren
Broncodeaantekening gebruiken
Aantekeningen maken bij formele parameters en retourwaarde van de functie
AddTailom aan te geven dat de aanwijzerwaarden null kunnen zijn:_Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)Kies Codeanalyse uitvoeren in oplossing in het menu Opbouwen.
Dubbelklik in de lijst met fouten op de volgende waarschuwing:
C6011: Derefereren van NULL-aanwijzer 'node'.
Deze waarschuwing geeft aan dat het knooppunt dat is doorgegeven aan de functie mogelijk null is.
Als u deze waarschuwing wilt corrigeren, gebruikt u een if-instructie aan het begin van de functie om de doorgegeven waarde te testen. Uw code moet er ongeveer als volgt uitzien:
if (nullptr == node) { return nullptr; }Kies Codeanalyse uitvoeren in oplossing in het menu Opbouwen.
Het project wordt nu gebouwd zonder waarschuwingen of fouten.
Zie ook
Overzicht: Beheerde code analyseren voor codefouten
Codeanalyse voor C/C++