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
Otwórz program Visual Studio i wybierz pozycję Utwórz nowy projekt
W oknie dialogowym Tworzenie nowego projektu zmień filtr języka na C++.
Wybierz pozycję Kreator pulpitu systemu Windows i wybierz przycisk Dalej .
Na stronie Konfigurowanie nowego projektu w polu tekstowym Nazwa projektu wprowadź CodeDefects.
W polu tekstowym Nazwa rozwiązania wprowadź CppDemo.
Wybierz pozycję Utwórz.
W oknie dialogowym Projekt klasyczny systemu Windows zmień typ aplikacji na Static Library (.lib).
W obszarze Dodatkowe opcje wybierz pozycję Pusty projekt.
Wybierz przycisk OK , aby utworzyć rozwiązanie i projekt.
Otwórz program Visual Studio. Na pasku menu wybierz pozycję Plik>nowy>projekt.
W oknie dialogowym Nowy projekt wybierz pozycję Visual C++>Windows Desktop.
Wybierz pozycję Kreator pulpitu systemu Windows.
W polu tekstowym Nazwa wprowadź codeDefects.
W polu tekstowym Nazwa rozwiązania wprowadź CppDemo.
Wybierz pozycję OK.
W oknie dialogowym Projekt klasyczny systemu Windows zmień typ aplikacji na Static Library (.lib).
W obszarze Dodatkowe opcje wybierz pozycję Pusty projekt.
Wybierz przycisk OK , aby utworzyć rozwiązanie i projekt.
Otwórz program Visual Studio. Na pasku menu wybierz pozycję Plik>nowy>projekt.
W oknie dialogowym Nowy projekt wybierz pozycję Szablony>Visual C++>Win32.
Wybierz pozycję Aplikacja konsolowa Win32.
W polu tekstowym Nazwa wprowadź codeDefects.
W polu tekstowym Nazwa rozwiązania wprowadź CppDemo.
Wybierz pozycję OK.
W oknie dialogowym Kreator aplikacji Win32 wybierz przycisk Dalej.
Zmień typ aplikacji na Bibliotekę statyczną.
W obszarze Dodatkowe opcje usuń zaznaczenie prekompilowanego nagłówka.
Wybierz pozycję Zakończ , aby utworzyć rozwiązanie i projekt.
Dodawanie nagłówka i pliku źródłowego do projektu CodeDefects
W Eksplorator rozwiązań rozwiń węzeł CodeDefects.
Kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe dla plików nagłówka. Wybierz pozycję Dodaj>nowy element.
W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Visual C++>Code, a następnie wybierz pozycję Plik nagłówka (h).
W polu Edycja nazwy wprowadź Bug.h, a następnie wybierz przycisk Dodaj.
W oknie edycji pliku Bug.h wybierz i usuń zawartość.
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;
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe plików źródłowych. Wybierz pozycję Dodaj>nowy element.
W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Plik C++ (cpp).
W polu Edycja nazwy wprowadź Wartość Bug.cpp, a następnie wybierz przycisk Dodaj.
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; }
Na pasku menu wybierz pozycję Plik>Zapisz wszystko.
Dodawanie projektu Adnotacje i konfigurowanie go jako biblioteki statycznej
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję CppDemo, aby otworzyć menu kontekstowe. Wybierz pozycję Dodaj>nowy projekt.
W oknie dialogowym Dodawanie nowego projektu wybierz pozycję Kreator pulpitu systemu Windows, a następnie wybierz przycisk Dalej.
Na stronie Konfigurowanie nowego projektu w polu tekstowym Nazwa projektu wprowadź adnotacje, a następnie wybierz pozycję Utwórz.
W oknie dialogowym Projekt klasyczny systemu Windows zmień typ aplikacji na Static Library (.lib).
W obszarze Dodatkowe opcje wybierz pozycję Pusty projekt.
Wybierz przycisk OK , aby utworzyć projekt.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję CppDemo, aby otworzyć menu kontekstowe. Wybierz pozycję Dodaj>nowy projekt.
W oknie dialogowym Dodawanie nowego projektu wybierz pozycję Visual C++>Windows Desktop.
Wybierz pozycję Kreator pulpitu systemu Windows.
W polu tekstowym Nazwa wprowadź adnotacje, a następnie wybierz przycisk OK.
W oknie dialogowym Projekt klasyczny systemu Windows zmień typ aplikacji na Static Library (.lib).
W obszarze Dodatkowe opcje wybierz pozycję Pusty projekt.
Wybierz przycisk OK , aby utworzyć projekt.
W Eksplorator rozwiązań kliknij prawym przyciskiem myszy pozycję CppDemo, aby otworzyć menu kontekstowe. Wybierz pozycję Dodaj>nowy projekt.
W oknie dialogowym Dodawanie nowego projektu wybierz pozycję Visual C++>Win32.
Wybierz pozycję Aplikacja konsolowa Win32.
W polu tekstowym Nazwa wprowadź adnotacje.
Wybierz pozycję OK.
W oknie dialogowym Kreator aplikacji Win32 wybierz przycisk Dalej.
Zmień typ aplikacji na Bibliotekę statyczną.
W obszarze Dodatkowe opcje usuń zaznaczenie prekompilowanego nagłówka.
Wybierz pozycję Zakończ , aby utworzyć projekt.
Dodawanie pliku nagłówka i pliku źródłowego do projektu Adnotacje
W Eksplorator rozwiązań rozwiń węzeł Adnotacje.
Kliknij prawym przyciskiem myszy, aby otworzyć menu kontekstowe dla pozycji Pliki nagłówków w obszarze Adnotacje. Wybierz pozycję Dodaj>nowy element.
W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Visual C++>Code, a następnie wybierz pozycję Plik nagłówka (h).
W polu Edycja nazwy wprowadź adnotacje.h, a następnie wybierz przycisk Dodaj.
W oknie edycji adnotacji.h wybierz i usuń zawartość.
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();
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.
W oknie dialogowym Dodawanie nowego elementu wybierz pozycję Plik C++ (cpp).
W polu Edycja nazwy wprowadź adnotacje.cpp, a następnie wybierz przycisk Dodaj.
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; }
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.
Opinia
https://aka.ms/ContentUserFeedback.
Dostępne już wkrótce: W 2024 r. będziemy stopniowo wycofywać zgłoszenia z serwisu GitHub jako mechanizm przesyłania opinii na temat zawartości i zastępować go nowym systemem opinii. Aby uzyskać więcej informacji, sprawdź:Prześlij i wyświetl opinię dla