Esempio di progetto C++ per l'analisi del codice

Le procedure seguenti illustrano come creare l'esempio per Procedura dettagliata: Analizzare il codice C/C++ per individuare eventuali difetti. Le procedure creano:

  • Soluzione di Visual Studio denominata CppDemo.

  • Progetto di libreria statica denominato CodeDefects.

  • Progetto di libreria statica denominato Annotations.

Le procedure specificano anche il codice per l'intestazione e i file con estensione cpp per le librerie statiche.

Creare la soluzione CppDemo e il progetto CodeDefects

  1. Aprire Visual Studio e selezionare Crea un nuovo progetto

  2. Nella finestra di dialogo Crea un nuovo progetto modificare il filtro del linguaggio in C++.

  3. Selezionare Creazione guidata desktop di Windows e scegliere il pulsante Avanti .

  4. Nella casella di testo Nome progetto della pagina Configura il nuovo progetto immettere CodeDefects.

  5. Nella casella di testo Nome soluzione immettere CppDemo.

  6. Scegliere Crea.

  7. Nella finestra di dialogo Progetto desktop di Windows modificare il tipo di applicazione in Libreria statica (.lib).

  8. In Opzioni aggiuntiveselezionare Progetto vuoto.

  9. Scegliere OK per creare la soluzione e il progetto.

  1. Aprire Visual Studio. Nella barra dei menu scegliere File>Nuovo>Progetto.

  2. Nella finestra di dialogo Nuovo progetto selezionare Visual C++>Windows Desktop.

  3. Selezionare Creazione guidata desktop di Windows.

  4. Nella casella di testo Nome immettere CodeDefects.

  5. Nella casella di testo Nome soluzione immettere CppDemo.

  6. Scegliere OK.

  7. Nella finestra di dialogo Progetto desktop di Windows modificare il tipo di applicazione in Libreria statica (.lib).

  8. In Opzioni aggiuntiveselezionare Progetto vuoto.

  9. Scegliere OK per creare la soluzione e il progetto.

  1. Aprire Visual Studio. Nella barra dei menu scegliere File>Nuovo>Progetto.

  2. Nella finestra di dialogo Nuovo progetto selezionare Modelli>Visual C++>Win32.

  3. Selezionare Applicazione console Win32.

  4. Nella casella di testo Nome immettere CodeDefects.

  5. Nella casella di testo Nome soluzione immettere CppDemo.

  6. Scegliere OK.

  7. Nella finestra di dialogo Creazione guidata applicazione Win32 scegliere il pulsante Avanti.

  8. Modificare il tipo di applicazione in Libreria statica.

  9. In Opzioni aggiuntive deselezionare Intestazione precompilata.

  10. Scegliere Fine per creare la soluzione e il progetto.

Aggiungere l'intestazione e il file di origine al progetto CodeDefects

  1. In Esplora soluzioni espandere CodeDefects.

  2. Fare clic con il pulsante destro del mouse per aprire il menu di scelta rapida per File di intestazione. Scegliere Aggiungi>nuovo elemento.

  3. Nella finestra di dialogo Aggiungi nuovo elemento selezionare Visual C++>Code e quindi selezionare File di intestazione (.h).

  4. Nella casella di modifica Nome immettere Bug.h e quindi scegliere il pulsante Aggiungi.

  5. Nella finestra di modifica per Bug.h selezionare ed eliminare il contenuto.

  6. Copiare il codice seguente e incollarlo nel file Bug.h nell'editor.

    #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. In Esplora soluzioni fare clic con il pulsante destro del mouse per aprire il menu di scelta rapida per File di origine. Scegliere Aggiungi>nuovo elemento.

  8. Nella finestra di dialogo Aggiungi nuovo elemento selezionare File di C++ (.cpp).

  9. Nella casella di modifica Nome immettere Bug.cpp e quindi scegliere il pulsante Aggiungi.

  10. Copiare il codice seguente e incollarlo nel file Bug.cpp nell'editor.

    #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. Sulla barra dei menu scegliere File>Salva tutto.

Aggiungere il progetto Annotations e configurarlo come libreria statica

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su CppDemo per aprire il menu di scelta rapida. Scegliere Aggiungi>Nuovo progetto.

  2. Nella finestra di dialogo Aggiungi un nuovo progetto selezionare Creazione guidata desktop di Windows e quindi scegliere il pulsante Avanti .

  3. Nella pagina Configura il nuovo progetto immettere Annotazioni nella casella di testo Nome progetto e quindi scegliere Crea.

  4. Nella finestra di dialogo Progetto desktop di Windows modificare il tipo di applicazione in Libreria statica (.lib).

  5. In Opzioni aggiuntiveselezionare Progetto vuoto.

  6. Scegliere OK per creare il progetto.

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su CppDemo per aprire il menu di scelta rapida. Scegliere Aggiungi>Nuovo progetto.

  2. Nella finestra di dialogo Aggiungi nuovo progetto selezionare Visual C++>Windows Desktop.

  3. Selezionare Creazione guidata desktop di Windows.

  4. Nella casella di testo Nome immettere Annotazioni e quindi scegliere OK.

  5. Nella finestra di dialogo Progetto desktop di Windows modificare il tipo di applicazione in Libreria statica (.lib).

  6. In Opzioni aggiuntiveselezionare Progetto vuoto.

  7. Scegliere OK per creare il progetto.

  1. In Esplora soluzioni fare clic con il pulsante destro del mouse su CppDemo per aprire il menu di scelta rapida. Scegliere Aggiungi>Nuovo progetto.

  2. Nella finestra di dialogo Aggiungi nuovo progetto selezionare Visual C++>Win32.

  3. Selezionare Applicazione console Win32.

  4. Nella casella di testo Nome immettere Annotazioni.

  5. Scegliere OK.

  6. Nella finestra di dialogo Creazione guidata applicazione Win32 scegliere il pulsante Avanti.

  7. Modificare il tipo di applicazione in Libreria statica.

  8. In Opzioni aggiuntive deselezionare Intestazione precompilata.

  9. Scegliere Fine per creare il progetto.

Aggiungere il file di intestazione e il file di origine per il progetto Annotations

  1. In Esplora soluzioni espandere Annotazioni.

  2. Fare clic con il pulsante destro del mouse per aprire il menu di scelta rapida per File di intestazione in Annotazioni. Scegliere Aggiungi>nuovo elemento.

  3. Nella finestra di dialogo Aggiungi nuovo elemento selezionare Visual C++>Code e quindi selezionare File di intestazione (.h).

  4. Nella casella di modifica Nome immettere annotations.h e quindi scegliere il pulsante Aggiungi.

  5. Nella finestra di modifica per annotations.h selezionare ed eliminare il contenuto.

  6. Copiare il codice seguente e incollarlo nel file annotations.h nell'editor.

    #pragma once
    #include <sal.h>
    
    struct LinkedList
    {
        struct LinkedList* next;
        int data;
    };
    
    typedef struct LinkedList LinkedList;
    
    _Ret_maybenull_ LinkedList* AllocateNode();
    
  7. In Esplora soluzioni fare clic con il pulsante destro del mouse per aprire il menu di scelta rapida per File di origine in Annotazioni. Scegliere Aggiungi>nuovo elemento.

  8. Nella finestra di dialogo Aggiungi nuovo elemento selezionare File di C++ (.cpp).

  9. Nella casella di modifica Nome immettere annotations.cpp e quindi scegliere il pulsante Aggiungi.

  10. Copiare il codice seguente e incollarlo nel file annotations.cpp nell'editor.

    #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. Sulla barra dei menu scegliere File>Salva tutto.

La soluzione è stata completata e dovrebbe essere compilata senza errori.

Nota

In Visual Studio 2017 potrebbe essere visualizzato un avviso E1097 unknown attribute "no_init_all" spurio nel motore IntelliSense. È possibile ignorare questo avviso.