Ukázkový projekt C++ pro analýzu kódu
Následující postupy ukazují, jak vytvořit ukázku pro návod: Analýza kódu C/C++ pro vady. Postupy vytvoří:
Řešení sady Visual Studio s názvem CppDemo.
Projekt statické knihovny s názvem CodeDefects.
Statický projekt knihovny s názvem Poznámky.
Postupy také poskytují kód hlavičky a souborů .cpp pro statické knihovny.
Vytvoření řešení CppDemo a projektu CodeDefects
Otevřete Visual Studio a vyberte Vytvořit nový projekt.
V dialogovém okně Vytvořit nový projekt změňte filtr jazyka na C++.
Vyberte Průvodce plochou systému Windows a zvolte tlačítko Další .
Na stránce Konfigurace nového projektu do textového pole Název projektu zadejte CodeDefects.
Do textového pole Název řešení zadejte CppDemo.
Zvolte Vytvořit.
V dialogovém okně Projekt plochy systému Windows změňte typ aplikace na statickou knihovnu (.lib).
V části Další možnosti vyberte Prázdný projekt.
Zvolte OK a vytvořte řešení a projekt.
Otevřete sadu Visual Studio. Na řádku nabídek zvolte Soubor>nový>projekt.
V dialogovém okně Nový projekt vyberte Visual C++>Windows Desktop.
Vyberte Průvodce plochou windows.
Do textového pole Název zadejte CodeDefects.
Do textového pole Název řešení zadejte CppDemo.
Vyberte OK.
V dialogovém okně Projekt plochy systému Windows změňte typ aplikace na statickou knihovnu (.lib).
V části Další možnosti vyberte Prázdný projekt.
Zvolte OK a vytvořte řešení a projekt.
Otevřete sadu Visual Studio. Na řádku nabídek zvolte Soubor>nový>projekt.
V dialogovém okně Nový projekt vyberte Šablony>Visual C++>Win32.
Vyberte konzolovou aplikaci Win32.
Do textového pole Název zadejte CodeDefects.
Do textového pole Název řešení zadejte CppDemo.
Vyberte OK.
V dialogovém okně Průvodce aplikací Win32 zvolte tlačítko Další .
Změňte typ aplikace na statickou knihovnu.
V části Další možnosti zrušte výběr předkompilované hlavičky.
Zvolte Dokončit a vytvořte řešení a projekt.
Přidání hlavičky a zdrojového souboru do projektu CodeDefects
V Průzkumník řešení rozbalte CodeDefects.
Kliknutím pravým tlačítkem otevřete místní nabídku pro soubory hlaviček. Zvolte Přidat>novou položku.
V dialogovém okně Přidat novou položku vyberte Visual C++>Code a pak vyberte Hlavičkový soubor (.h).
Do textového pole Název zadejte Bug.h a pak zvolte tlačítko Přidat .
V okně pro úpravy pro Bug.h vyberte a odstraňte obsah.
Zkopírujte následující kód a vložte ho do souboru Bug.h v editoru.
#pragma once #include <windows.h> // Function prototypes bool CheckDomain(wchar_t const *); HRESULT ReadUserAccount(); // These constants define the common sizes of the // user account information throughout the program const int USER_ACCOUNT_LEN = 256; const int ACCOUNT_DOMAIN_LEN = 128;
V Průzkumník řešení kliknutím pravým tlačítkem otevřete místní nabídku pro zdrojové soubory. Zvolte Přidat>novou položku.
V dialogovém okně Přidat novou položku vyberte soubor C++ (.cpp).
Do textového pole Název zadejte Bug.cpp a pak zvolte tlačítko Přidat .
Zkopírujte následující kód a vložte ho do souboru Bug.cpp v editoru.
#include "Bug.h" // the user account wchar_t g_userAccount[USER_ACCOUNT_LEN] = { L"domain\\user" }; int len = 0; bool CheckDomain(wchar_t const* domain) { return (wcsnlen_s(domain, USER_ACCOUNT_LEN) > 0); } HRESULT ReadUserAccount() { return S_OK; } bool ProcessDomain() { wchar_t* domain = new wchar_t[ACCOUNT_DOMAIN_LEN]; // ReadUserAccount gets a 'domain\user' input from //the user into the global 'g_userAccount' if (ReadUserAccount()) { // Copies part of the string prior to the '\' // character onto the 'domain' buffer for (len = 0; (len < ACCOUNT_DOMAIN_LEN) && (g_userAccount[len] != L'\0'); len++) { if (g_userAccount[len] == L'\\') { // Stops copying on the domain and user separator ('\') break; } domain[len] = g_userAccount[len]; } if ((len = ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\')) { // '\' was not found. Invalid domain\user string. delete[] domain; return false; } else { domain[len] = L'\0'; } // Process domain string bool result = CheckDomain(domain); delete[] domain; return result; } return false; } int path_dependent(int n) { int i; int j; if (n == 0) i = 1; else j = 1; return i + j; }
Na řádku nabídek zvolte Soubor>uložit vše.
Přidejte projekt poznámek a nakonfigurujte ho jako statickou knihovnu.
V Průzkumník řešení kliknutím pravým tlačítkem myši na CppDemo otevřete místní nabídku. Zvolte Přidat>nový projekt.
V dialogovém okně Přidat nový projekt vyberte Průvodce plochou systémem Windows a pak zvolte tlačítko Další .
Na stránce Konfigurovat nový projekt zadejte do textového pole Název projektu poznámky a pak zvolte Vytvořit.
V dialogovém okně Projekt plochy systému Windows změňte typ aplikace na statickou knihovnu (.lib).
V části Další možnosti vyberte Prázdný projekt.
Zvolte OK a vytvořte projekt.
V Průzkumník řešení kliknutím pravým tlačítkem myši na CppDemo otevřete místní nabídku. Zvolte Přidat>nový projekt.
V dialogovém okně Přidat nový projekt vyberte Visual C++>Windows Desktop.
Vyberte Průvodce plochou windows.
Do textového pole Název zadejte Poznámky a pak zvolte OK.
V dialogovém okně Projekt plochy systému Windows změňte typ aplikace na statickou knihovnu (.lib).
V části Další možnosti vyberte Prázdný projekt.
Zvolte OK a vytvořte projekt.
V Průzkumník řešení kliknutím pravým tlačítkem myši na CppDemo otevřete místní nabídku. Zvolte Přidat>nový projekt.
V dialogovém okně Přidat nový projekt vyberte Visual C++>Win32.
Vyberte konzolovou aplikaci Win32.
Do textového pole Název zadejte poznámky.
Vyberte OK.
V dialogovém okně Průvodce aplikací Win32 zvolte tlačítko Další .
Změňte typ aplikace na statickou knihovnu.
V části Další možnosti zrušte výběr předkompilované hlavičky.
Zvolte Dokončit a vytvořte projekt.
Přidání souboru záhlaví a zdrojového souboru do projektu Poznámky
V Průzkumník řešení rozbalte poznámky.
Kliknutím pravým tlačítkem myši otevřete místní nabídku pro soubory záhlaví v části Poznámky. Zvolte Přidat>novou položku.
V dialogovém okně Přidat novou položku vyberte Visual C++>Code a pak vyberte Hlavičkový soubor (.h).
Do textového pole Název zadejte poznámky.h a pak zvolte tlačítko Přidat .
V okně pro úpravy poznámek.h vyberte a odstraňte obsah.
Zkopírujte následující kód a vložte ho do souboru anotace.h v editoru.
#pragma once #include <sal.h> struct LinkedList { struct LinkedList* next; int data; }; typedef struct LinkedList LinkedList; _Ret_maybenull_ LinkedList* AllocateNode();
V Průzkumník řešení kliknutím pravým tlačítkem otevřete místní nabídku zdrojových souborů v části Poznámky. Zvolte Přidat>novou položku.
V dialogovém okně Přidat novou položku vyberte soubor C++ (.cpp).
Do textového pole Název zadejte poznámky.cpp a pak zvolte tlačítko Přidat .
Zkopírujte následující kód a vložte ho do souboru annotations.cpp v editoru.
#include "annotations.h" #include <malloc.h> _Ret_maybenull_ LinkedList* AllocateNode() { LinkedList* result = static_cast<LinkedList*>(malloc(sizeof(LinkedList))); return result; } LinkedList* AddTail(LinkedList* node, int value) { // finds the last node while (node->next != nullptr) { node = node->next; } // appends the new node LinkedList* newNode = AllocateNode(); newNode->data = value; newNode->next = 0; node->next = newNode; return newNode; }
Na řádku nabídek zvolte Soubor>uložit vše.
Řešení je teď hotové a mělo by se sestavit bez chyb.
Poznámka
V sadě Visual Studio 2017 se v modulu IntelliSense může zobrazit upozornění E1097 unknown attribute "no_init_all"
. Toto upozornění můžete klidně ignorovat.