Udostępnij za pośrednictwem


Przykładowy projekt C++ na potrzeby analizy kodu

Poniższe procedury pokazują, jak utworzyć przykład dla przewodnika: Analizowanie kodu C/C++ pod kątem wad. Procedury tworzą:

  • Rozwiązanie programu Visual Studio o nazwie CppDemo.

  • Projekt biblioteki statycznej o nazwie CodeDefects.

  • Projekt biblioteki statycznej o nazwie Adnotacje.

Procedury zawierają również kod dla plików nagłówków i cpp dla bibliotek statycznych.

Tworzenie rozwiązania CppDemo i projektu CodeDefects

  1. Otwórz program Visual Studio i wybierz pozycję Utwórz nowy projekt

  2. W oknie dialogowym Tworzenie nowego projektu zmień filtr języka na C++.

  3. Wybierz pozycję Kreator pulpitu systemu Windows i wybierz przycisk Dalej .

  4. Na stronie Konfigurowanie nowego projektu w polu tekstowym Nazwa projektu wprowadź CodeDefects.

  5. W polu tekstowym Nazwa rozwiązania wprowadź CppDemo.

  6. Wybierz pozycję Utwórz.

  7. W oknie dialogowym Projekt klasyczny systemu Windows zmień typ aplikacji na Static Library (.lib).

  8. W obszarze Dodatkowe opcje wybierz pozycję Pusty projekt.

  9. Wybierz przycisk OK , aby utworzyć rozwiązanie i projekt.

  1. Otwórz program Visual Studio. Na pasku menu wybierz pozycję Plik>nowy>projekt.

  2. W oknie dialogowym Nowy projekt wybierz pozycję Visual C++>Windows Desktop.

  3. Wybierz pozycję Kreator pulpitu systemu Windows.

  4. W polu tekstowym Nazwa wprowadź codeDefects.

  5. W polu tekstowym Nazwa rozwiązania wprowadź CppDemo.

  6. Wybierz pozycję OK.

  7. W oknie dialogowym Projekt klasyczny systemu Windows zmień typ aplikacji na Static Library (.lib).

  8. W obszarze Dodatkowe opcje wybierz pozycję Pusty projekt.

  9. Wybierz przycisk OK , aby utworzyć rozwiązanie i projekt.

  1. Otwórz program Visual Studio. Na pasku menu wybierz pozycję Plik>nowy>projekt.

  2. W oknie dialogowym Nowy projekt wybierz pozycję Szablony>Visual C++>Win32.

  3. Wybierz pozycję Aplikacja konsolowa Win32.

  4. W polu tekstowym Nazwa wprowadź codeDefects.

  5. W polu tekstowym Nazwa rozwiązania wprowadź CppDemo.

  6. Wybierz pozycję OK.

  7. W oknie dialogowym Kreator aplikacji Win32 wybierz przycisk Dalej.

  8. Zmień typ aplikacji na Bibliotekę statyczną.

  9. W obszarze Dodatkowe opcje usuń zaznaczenie prekompilowanego nagłówka.

  10. Wybierz pozycję Zakończ , aby utworzyć rozwiązanie i projekt.

Dodawanie nagłówka i pliku źródłowego do projektu CodeDefects

  1. W Eksplorator rozwiązań rozwiń węzeł CodeDefects.

  2. Kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe dla plików nagłówka. Wybierz pozycję Dodaj>nowy element.

  3. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Visual C++>Code, a następnie wybierz pozycję Plik nagłówka (h).

  4. W polu Edycja nazwy wprowadź Bug.h, a następnie wybierz przycisk Dodaj.

  5. W oknie edycji pliku Bug.h wybierz i usuń zawartość.

  6. Skopiuj poniższy kod i wklej go do pliku Bug.h w edytorze.

    #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. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe plików źródłowych. Wybierz pozycję Dodaj>nowy element.

  8. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Plik C++ (cpp).

  9. W polu Edycja nazwy wprowadź Wartość Bug.cpp, a następnie wybierz przycisk Dodaj.

  10. Skopiuj poniższy kod i wklej go do pliku Bug.cpp w edytorze.

    #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 pasku menu wybierz pozycję Plik>Zapisz wszystko.

Dodawanie projektu Adnotacje i konfigurowanie go jako biblioteki statycznej

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję CppDemo, aby otworzyć menu kontekstowe. Wybierz pozycję Dodaj>nowy projekt.

  2. W oknie dialogowym Dodawanie nowego projektu wybierz pozycję Kreator pulpitu systemu Windows, a następnie wybierz przycisk Dalej.

  3. Na stronie Konfigurowanie nowego projektu w polu tekstowym Nazwa projektu wprowadź adnotacje, a następnie wybierz pozycję Utwórz.

  4. W oknie dialogowym Projekt klasyczny systemu Windows zmień typ aplikacji na Static Library (.lib).

  5. W obszarze Dodatkowe opcje wybierz pozycję Pusty projekt.

  6. Wybierz przycisk OK , aby utworzyć projekt.

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję CppDemo, aby otworzyć menu kontekstowe. Wybierz pozycję Dodaj>nowy projekt.

  2. W oknie dialogowym Dodawanie nowego projektu wybierz pozycję Visual C++>Windows Desktop.

  3. Wybierz pozycję Kreator pulpitu systemu Windows.

  4. W polu tekstowym Nazwa wprowadź adnotacje, a następnie wybierz przycisk OK.

  5. W oknie dialogowym Projekt klasyczny systemu Windows zmień typ aplikacji na Static Library (.lib).

  6. W obszarze Dodatkowe opcje wybierz pozycję Pusty projekt.

  7. Wybierz przycisk OK , aby utworzyć projekt.

  1. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję CppDemo, aby otworzyć menu kontekstowe. Wybierz pozycję Dodaj>nowy projekt.

  2. W oknie dialogowym Dodawanie nowego projektu wybierz pozycję Visual C++>Win32.

  3. Wybierz pozycję Aplikacja konsolowa Win32.

  4. W polu tekstowym Nazwa wprowadź adnotacje.

  5. Wybierz pozycję OK.

  6. W oknie dialogowym Kreator aplikacji Win32 wybierz przycisk Dalej.

  7. Zmień typ aplikacji na Bibliotekę statyczną.

  8. W obszarze Dodatkowe opcje usuń zaznaczenie prekompilowanego nagłówka.

  9. Wybierz pozycję Zakończ , aby utworzyć projekt.

Dodawanie pliku nagłówka i pliku źródłowego do projektu Adnotacje

  1. W Eksplorator rozwiązań rozwiń węzeł Adnotacje.

  2. Kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe dla pozycji Pliki nagłówków w obszarze Adnotacje. Wybierz pozycję Dodaj>nowy element.

  3. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Visual C++>Code, a następnie wybierz pozycję Plik nagłówka (h).

  4. W polu Edycja nazwy wprowadź adnotacje.h, a następnie wybierz przycisk Dodaj.

  5. W oknie edycji adnotacji.h wybierz i usuń zawartość.

  6. Skopiuj poniższy kod i wklej go do pliku annotations.h w edytorze.

    #pragma once
    #include <sal.h>
    
    struct LinkedList
    {
        struct LinkedList* next;
        int data;
    };
    
    typedef struct LinkedList LinkedList;
    
    _Ret_maybenull_ LinkedList* AllocateNode();
    
  7. W Eksplorator rozwiązań kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe plików źródłowych w obszarze Adnotacje. Wybierz pozycję Dodaj>nowy element.

  8. W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Plik C++ (cpp).

  9. W polu Edycja nazwy wprowadź adnotacje.cpp, a następnie wybierz przycisk Dodaj.

  10. Skopiuj poniższy kod i wklej go do pliku annotations.cpp w edytorze.

    #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 pasku menu wybierz pozycję Plik>Zapisz wszystko.

Rozwiązanie jest teraz kompletne i powinno być kompilowanie bez błędów.

Uwaga

W programie Visual Studio 2017 w a aparatze IntelliSense może zostać wyświetlone fałszywe ostrzeżenie E1097 unknown attribute "no_init_all" . Możesz bezpiecznie zignorować to ostrzeżenie.