Udostępnij za pośrednictwem


Przykładowy pokaz

Następujące procedury pokazują jak utworzyć próbkę dla Instruktaż: Analizowanie kod C/C++ dla wad.Procedury tworzą:

  • Rozwiązanie Visual Studio o nazwie CppDemo.

  • Bibliotekę statyczną projektu o nazwie CodeDefects.

  • Bibliotekę statyczną projektu o nazwie Annotations.

Procedury zapewniają także kod nagłówka i pliku cpp dla bibliotek statycznych.

Stwórz rozwiązanie CppDemo i projekt CodeDefects

  1. Kliknij Plik menu, wskaż Nowy, a następnie kliknij przycisk Nowy projekt.

  2. W drzewie Typy projektów, jeśli Visual C++, nie jest językiem domyślnym w VS rozwiń węzeł Inne języki.

  3. Rozwiń Visual C++, a następnie kliknij przycisk Ogólne.

  4. W Szablony, kliknij Pusty projekt.

  5. W polu tekstowym Nazwa, wpisz CodeDefects.

  6. Wybierz pole wyboru Utwórz katalog rozwiązania.

  7. W polu tekstowym Nazwa rozwiązania wpisz CppDemo.

Konfigurowanie projektu CodeDefects jako biblioteki statycznej

  1. W oknie Eksploratora rozwiązania, kliknij prawym przyciskiem myszy na CodeDefects, a następnie kliknij przycisk Właściwości.

  2. Rozwiń Właściwości konfiguracji i kliknij przycisk Ogólne.

  3. W liście Ogólne, zaznacz tekst w kolumnie obok Rozszerzenie docelowe, a następnie wpisz .lib.

  4. W Domyślne ustawienia projektu, kliknij kolumnę Typ konfiguracji, a następnie kliknij przycisk Biblioteka statyczna (lib).

Dodaj nagłówek i plik z kodem źródłowym do projektu CodeDefects

  1. W Eksploratorze rozwiązania rozwiń CodeDefects, kliknij prawym przyciskiem myszy Pliki nagłówków, kliknij Dodaj, a następnie kliknij przycisk Nowy element.

  2. W oknie dialogowym Dodaj nowy element, kliknij Kod, a następnie kliknij przycisk Plik nagłówkowy (h).

  3. W polu Nazwa wpisz Bug.cpp, a następnie kliknij Dodaj.

  4. Skopiuj poniższy kod i wklej go do pliku Bug.cpp w edytorze Visual Studio.

    #include <windows.h>
    
    //  
    //These 3 functions are consumed by the sample
    //  but are not defined. This project cannot be linked!
    //
    
    bool CheckDomain( LPCSTR );
    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;
    
  5. W oknie Eksploratora rozwiązania, kliknij prawym przyciskiem myszy Pliki źródłowe, wskaż Nowy, a następnie kliknij Nowy element.

  6. W oknie dialogowym Dodaj nowy element, kliknij Plik C++ (cpp)

  7. W polu Nazwa wpisz Bug.cpp, a następnie kliknij Dodaj.

  8. Skopiuj poniższy kod i wklej go do pliku Bug.h w edytorze Visual Studio.

    #include <stdlib.h>
    #include "Bug.h"
    
    // the user account 
    TCHAR g_userAccount[USER_ACCOUNT_LEN] = "";
    int len = 0;
    
    bool ProcessDomain()
    {
        TCHAR* domain = new TCHAR[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] != '\0') ; len++  )
            {
                if ( g_userAccount[len] == '\\' ) 
                {
                    // Stops copying on the domain and user separator ('\') 
                    break;
                }
                domain[len] = g_userAccount[len];        
            }
            if((len= ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != '\\'))
            {
                // '\' was not found. Invalid domain\user string.
                delete [] domain;
                return false;
            }
            else
            {
                domain[len]='\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; 
    }
    
  9. Kliknij menu Plik, a następnie kliknij Zapisz wszystkie.

Dodaj projekt Annotations i skonfiguruj go jako bibliotekę statyczną

  1. W Eksploratorze rozwiązania kliknij CppDemo, wskaż Dodaj, a następnie kliknij przycisk Nowy projekt.

  2. W oknie dialogowym Dodaj nowy projekt, rozwiń opcję Visual C++ kliknij Ogólne, a następnie kliknij przycisk Pusty projekt.

  3. W polu tekstowym Nazwa wpisz Annotations, a następnie kliknij przycisk Dodaj.

  4. W Eksploratorze rozwiązania, kliknij prawym przyciskiem myszy Annotations, a następnie kliknij przycisk Właściwości.

  5. Rozwiń Właściwości konfiguracji i kliknij przycisk Ogólne.

  6. W liście Ogólne, zaznacz tekst w kolumnie obok Rozszerzenie docelowe, a następnie wpisz .lib.

  7. W Domyślne ustawienia projektu, kliknij kolumnę Typ konfiguracji, a następnie kliknij przycisk Biblioteka statyczna (lib).

Dodaj nagłówek pliku i plik źródłowego do projektu Annotations

  1. W Eksploratorze rozwiązania rozwiń Annotations, kliknij prawym przyciskiem myszy Pliki nagłówkowe, kliknij Dodaj, a następnie kliknij przycisk Nowy element.

  2. W oknie dialogowym Dodaj nowy element, kliknij przycisk Plik nagłówkowy (h).

  3. W polu Nazwa wpisz annotations.h, a następnie kliknij przycisk Dodaj.

  4. Skopiuj poniższy kod i wklej go do annotations.h pliku w edytorze Visual Studio.

    #include <CodeAnalysis/SourceAnnotations.h>
    
    struct LinkedList
    {
        struct LinkedList* next;
        int data;
    };
    
    typedef struct LinkedList LinkedList;
    
    [returnvalue:SA_Post( Null=SA_Maybe )] LinkedList* AllocateNode();
    
  5. W oknie Eksploratora rozwiązania, kliknij prawym przyciskiem myszy Pliki źródłowe, wskaż Nowy, a następnie kliknij Nowy element.

  6. W oknie dialogowym Dodaj nowy element, kliknij przycisk Kod i kliknij Plik C++ (cpp)

  7. W polu Nazwa wpisz annotations.cpp , a następnie kliknij Dodaj.

  8. Skopiuj poniższy kod i wklej go do pliku annotations.cpp w edytorze Visual Studio.

    #include <CodeAnalysis/SourceAnnotations.h>
    #include <windows.h>
    #include <stdlib.h>  
    #include "annotations.h"
    
    LinkedList* AddTail( LinkedList *node, int value )
    {
        LinkedList *newNode = NULL; 
    
        // finds the last node
        while ( node->next != NULL ) 
        {
            node = node->next;
        }
    
        // appends the new node
        newNode = AllocateNode(); 
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    
        return newNode;
    }
    
  9. Kliknij menu Plik, a następnie kliknij Zapisz wszystkie.