Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez az útmutató bemutatja, hogyan elemezheti a C/C++ kódokat a lehetséges kódhibák esetén. A C/C++ kód kódelemző eszközeit használja.
Ebben az útmutatóban a következőt fogja elvégezni:
- Kódelemzés futtatása natív kódon.
- Kódhibákra vonatkozó figyelmeztetések elemzése.
- A figyelmeztetést hibaként kezelje.
- A kódhibák elemzésének javítása érdekében jegyzetelje a forráskódot.
Előfeltételek
- A CppDemo-minta másolata.
- A C/C++ alapszintű ismerete.
Kódelemzés futtatása natív kódon
Kódhibák elemzése natív kódon
Nyissa meg a CppDemo-megoldást a Visual Studióban.
A CppDemo-megoldás most feltölti a Megoldáskezelőt.
A Build menüben válassza a Megoldás újraépítése lehetőséget.
A megoldás hibák és figyelmeztetések nélkül épül fel.
A Megoldáskezelőben válassza a CodeDefects projektet.
A Projekt menüben válassza a Tulajdonságok lehetőséget.
Megjelenik a CodeDefects Tulajdonságlapok párbeszédpanel.
Válassza ki a Code Analysis tulajdonságlapját.
Módosítsa az Enable Code Analysis on Buildtulajdonságot Igen értékre. A módosítások mentéséhez válassza az OK lehetőséget.
A CodeDefects-projekt újraépítése.
A kódelemzési figyelmeztetések a Hibalista ablakban jelennek meg.
Nyissa meg a CppDemo-megoldást a Visual Studióban.
A CppDemo-megoldás most feltölti a Megoldáskezelőt.
A Build menüben válassza a Megoldás újraépítése lehetőséget.
A megoldás hibák és figyelmeztetések nélkül épül fel.
Megjegyzés:
A Visual Studio 2017-ben hamis figyelmeztetés
E1097 unknown attribute "no_init_all"jelenhet meg az IntelliSense motorban. Az üzenet biztonságosan figyelmen kívül hagyható –A Megoldáskezelőben válassza a CodeDefects projektet.
A Projekt menüben válassza a Tulajdonságok lehetőséget.
Megjelenik a CodeDefects Tulajdonságlapok párbeszédpanel.
Válassza ki a Code Analysis tulajdonságlapját.
Jelölje be a Kódelemzés engedélyezése buildeléskor jelölőnégyzetet. A módosítások mentéséhez válassza az OK lehetőséget.
A CodeDefects-projekt újraépítése.
A kódelemzési figyelmeztetések a Hibalista ablakban jelennek meg.
Kódhibákkal kapcsolatos figyelmeztetések elemzése
A Nézet menüben válassza a Hiba lista lehetőséget.
Előfordulhat, hogy ez a menüelem nem látható. Ez a Visual Studióban kiválasztott fejlesztői profiltól függ. Előfordulhat, hogy a Nézet menü Más Windows elemére kell mutatnia, majd válassza a Hibalista lehetőséget.
A Hibalista ablakban kattintson duplán a következő figyelmeztetésre:
C6230: Implicit konverzió szemantikailag eltérő típusok között: a HRESULT használata logikai kontextusban.
A kódszerkesztő megjeleníti a függvény
bool ProcessDomain()belsejében a figyelmeztetést okozó sort. Ez a figyelmeztetés azt jelzi, hogy egyHRESULTolyan "ha" feltételben használatos, ahol logikai eredményre van szükség. Ez általában hiba, mert ha aS_OKHRESULT függvényt visszaadják egy függvényből, az sikerességet jelez, de logikai értékké alakítva a függvény kiértékeli a következőtfalse: .Javítsa ki ezt a figyelmeztetést a
SUCCEEDEDmakróval, amely akkor lesz átalakítvatrue, ha aHRESULTvisszatérési érték sikerességet jelez. A kódnak a következő kódhoz kell hasonlítania:if (SUCCEEDED(ReadUserAccount()))A hibalistában kattintson duplán a következő figyelmeztetésre:
C6282: Helytelen operátor: az állandó hozzárendelése logikai környezetben. Fontolja meg inkább az "==" használatát.
Javítsa ki ezt a figyelmeztetést az egyenlőség tesztelésével. A kódnak a következő kódhoz hasonlóan kell kinéznie:
if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))Javítsa ki a hibalistában szereplő többi C6001-figyelmeztetést az inicializálással
iésja 0-ra.A CodeDefects-projekt újraépítése.
A projekt figyelmeztetések és hibák nélkül épül fel.
A forráskód-annotációk figyelmeztetéseinek javítása
A forráskód megjegyzésekkel kapcsolatos figyelmeztetéseinek engedélyezése a annotation.c fájlban
A Megoldáskezelőben válassza a Széljegyzetek projektet.
A Projekt menüben válassza a Tulajdonságok lehetőséget.
Megjelenik a Megjegyzések tulajdonságlapjai párbeszédpanel.
Válassza ki a Code Analysis tulajdonságlapját.
Módosítsa az Enable Code Analysis on Buildtulajdonságot Igen értékre. A módosítások mentéséhez válassza az OK lehetőséget.
A Megoldáskezelőben válassza a Széljegyzetek projektet.
A Projekt menüben válassza a Tulajdonságok lehetőséget.
Megjelenik a Megjegyzések tulajdonságlapjai párbeszédpanel.
Válassza ki a Code Analysis tulajdonságlapját.
Jelölje be a Kódelemzés engedélyezése buildeléskor jelölőnégyzetet. A módosítások mentéséhez válassza az OK lehetőséget.
A forráskód széljegyzetekkel kapcsolatos figyelmeztetéseinek javítása a annotation.c fájlban
A Jegyzetek projektet újjáépíteni.
A Build menüben válassza a Kódelemzés futtatása széljegyzeteken lehetőséget.
A hibalistában kattintson duplán a következő figyelmeztetésre:
C6011: Null mutató "newNode" elhalasztása.
Ez a figyelmeztetés azt jelzi, hogy a hívó nem ellenőrizte a visszatérési értéket. Ebben az esetben előfordulhat, hogy
AllocateNodeegy hívás NULL értéket ad vissza. AzAllocateNodefüggvény deklarációját az annotations.h fejlécfájlban találja.A kurzor azon a helyen található a annotations.cpp fájlban, ahol a figyelmeztetés történt.
A figyelmeztetés kijavításához használjon egy "if" utasítást a visszatérési érték teszteléséhez. A kódnak a következő kódhoz kell hasonlítania:
LinkedList* newNode = AllocateNode(); if (nullptr != newNode) { newNode->data = value; newNode->next = 0; node->next = newNode; }A Jegyzetek projektet újjáépíteni.
A projekt figyelmeztetések és hibák nélkül épül fel.
További problémák felderítéséhez használjon forráskód-széljegyzetet
A forráskód széljegyzetének használata
A függvény
AddTailformális paramétereinek és visszatérési értékének megjegyzésével jelezheti, hogy a mutató értéke null lehet:_Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)A Build menüben válassza a Kódelemzés futtatása a megoldáson lehetőséget.
A hibalistában kattintson duplán a következő figyelmeztetésre:
C6011: NULL mutató "csomópont" elhalasztása.
Ez a figyelmeztetés azt jelzi, hogy a függvénybe átadott csomópont null értékű lehet.
A figyelmeztetés kijavításához használjon egy "if" utasítást a függvény elején az átadott érték teszteléséhez. A kódnak a következő kódhoz kell hasonlítania:
if (nullptr == node) { return nullptr; }A Build menüben válassza a Kódelemzés futtatása a megoldáson lehetőséget.
A projekt mostantól figyelmeztetések és hibák nélkül épül fel.
Lásd még
Útmutató: Felügyelt kód elemzése kódhibákhoz
C/C++ kódelemzése