Sdílet prostřednictvím


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

  1. Otevřete Visual Studio a vyberte Vytvořit nový projekt.

  2. V dialogovém okně Vytvořit nový projekt změňte filtr jazyka na C++.

  3. Vyberte Průvodce plochou systému Windows a zvolte tlačítko Další .

  4. Na stránce Konfigurace nového projektu do textového pole Název projektu zadejte CodeDefects.

  5. Do textového pole Název řešení zadejte CppDemo.

  6. Zvolte Vytvořit.

  7. V dialogovém okně Projekt plochy systému Windows změňte typ aplikace na statickou knihovnu (.lib).

  8. V části Další možnosti vyberte Prázdný projekt.

  9. Zvolte OK a vytvořte řešení a projekt.

  1. Otevřete sadu Visual Studio. Na řádku nabídek zvolte Soubor>nový>projekt.

  2. V dialogovém okně Nový projekt vyberte Visual C++>Windows Desktop.

  3. Vyberte Průvodce plochou windows.

  4. Do textového pole Název zadejte CodeDefects.

  5. Do textového pole Název řešení zadejte CppDemo.

  6. Vyberte OK.

  7. V dialogovém okně Projekt plochy systému Windows změňte typ aplikace na statickou knihovnu (.lib).

  8. V části Další možnosti vyberte Prázdný projekt.

  9. Zvolte OK a vytvořte řešení a projekt.

  1. Otevřete sadu Visual Studio. Na řádku nabídek zvolte Soubor>nový>projekt.

  2. V dialogovém okně Nový projekt vyberte Šablony>Visual C++>Win32.

  3. Vyberte konzolovou aplikaci Win32.

  4. Do textového pole Název zadejte CodeDefects.

  5. Do textového pole Název řešení zadejte CppDemo.

  6. Vyberte OK.

  7. V dialogovém okně Průvodce aplikací Win32 zvolte tlačítko Další .

  8. Změňte typ aplikace na statickou knihovnu.

  9. V části Další možnosti zrušte výběr předkompilované hlavičky.

  10. Zvolte Dokončit a vytvořte řešení a projekt.

Přidání hlavičky a zdrojového souboru do projektu CodeDefects

  1. V Průzkumník řešení rozbalte CodeDefects.

  2. Kliknutím pravým tlačítkem otevřete místní nabídku pro soubory hlaviček. Zvolte Přidat>novou položku.

  3. V dialogovém okně Přidat novou položku vyberte Visual C++>Code a pak vyberte Hlavičkový soubor (.h).

  4. Do textového pole Název zadejte Bug.h a pak zvolte tlačítko Přidat .

  5. V okně pro úpravy pro Bug.h vyberte a odstraňte obsah.

  6. 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;
    
  7. 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.

  8. V dialogovém okně Přidat novou položku vyberte soubor C++ (.cpp).

  9. Do textového pole Název zadejte Bug.cpp a pak zvolte tlačítko Přidat .

  10. 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;
    }
    
  11. Na řádku nabídek zvolte Soubor>uložit vše.

Přidejte projekt poznámek a nakonfigurujte ho jako statickou knihovnu.

  1. 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.

  2. V dialogovém okně Přidat nový projekt vyberte Průvodce plochou systémem Windows a pak zvolte tlačítko Další .

  3. Na stránce Konfigurovat nový projekt zadejte do textového pole Název projektu poznámky a pak zvolte Vytvořit.

  4. V dialogovém okně Projekt plochy systému Windows změňte typ aplikace na statickou knihovnu (.lib).

  5. V části Další možnosti vyberte Prázdný projekt.

  6. Zvolte OK a vytvořte projekt.

  1. 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.

  2. V dialogovém okně Přidat nový projekt vyberte Visual C++>Windows Desktop.

  3. Vyberte Průvodce plochou windows.

  4. Do textového pole Název zadejte Poznámky a pak zvolte OK.

  5. V dialogovém okně Projekt plochy systému Windows změňte typ aplikace na statickou knihovnu (.lib).

  6. V části Další možnosti vyberte Prázdný projekt.

  7. Zvolte OK a vytvořte projekt.

  1. 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.

  2. V dialogovém okně Přidat nový projekt vyberte Visual C++>Win32.

  3. Vyberte konzolovou aplikaci Win32.

  4. Do textového pole Název zadejte poznámky.

  5. Vyberte OK.

  6. V dialogovém okně Průvodce aplikací Win32 zvolte tlačítko Další .

  7. Změňte typ aplikace na statickou knihovnu.

  8. V části Další možnosti zrušte výběr předkompilované hlavičky.

  9. Zvolte Dokončit a vytvořte projekt.

Přidání souboru záhlaví a zdrojového souboru do projektu Poznámky

  1. V Průzkumník řešení rozbalte poznámky.

  2. 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.

  3. V dialogovém okně Přidat novou položku vyberte Visual C++>Code a pak vyberte Hlavičkový soubor (.h).

  4. Do textového pole Název zadejte poznámky.h a pak zvolte tlačítko Přidat .

  5. V okně pro úpravy poznámek.h vyberte a odstraňte obsah.

  6. 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();
    
  7. 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.

  8. V dialogovém okně Přidat novou položku vyberte soubor C++ (.cpp).

  9. Do textového pole Název zadejte poznámky.cpp a pak zvolte tlačítko Přidat .

  10. 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;
    }
    
  11. 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.