Bagikan melalui


Contoh proyek C++ untuk analisis kode

Prosedur berikut menunjukkan kepada Anda cara membuat sampel untuk Walkthrough: Menganalisis kode C/C++ untuk cacat. Prosedur membuat:

  • Solusi Visual Studio bernama CppDemo.

  • Proyek pustaka statis bernama CodeDefects.

  • Proyek pustaka statis bernama Anotasi.

Prosedur ini juga menyediakan kode untuk file header dan .cpp untuk pustaka statis.

Membuat solusi CppDemo dan proyek CodeDefects

  1. Buka Visual Studio dan pilih Buat proyek baru

  2. Dalam dialog Buat proyek baru, ubah filter bahasa menjadi C++.

  3. Pilih Windows Desktop Wizard dan pilih tombol Berikutnya .

  4. Pada halaman Konfigurasikan proyek baru Anda, di kotak teks Nama proyek, masukkan CodeDefects.

  5. Dalam kotak teks Nama solusi, masukkan CppDemo.

  6. Pilih Buat.

  7. Dalam dialog Proyek Desktop Windows, ubah Jenis aplikasi menjadi Pustaka Statis (.lib).

  8. Di bawah Opsi tambahan, pilih Kosongkan proyek.

  9. Pilih OK untuk membuat solusi dan proyek.

  1. Buka Visual Studio. Dari bilah menu, pilih File>New>Project.

  2. Dalam dialog Proyek Baru, pilih Visual C++>Windows Desktop.

  3. Pilih Panduan Desktop Windows.

  4. Dalam kotak teks Nama , masukkan CodeDefects.

  5. Dalam kotak teks Nama solusi, masukkan CppDemo.

  6. Pilih OK.

  7. Dalam dialog Proyek Desktop Windows, ubah Jenis aplikasi menjadi Pustaka Statis (.lib).

  8. Di bawah Opsi tambahan, pilih Kosongkan proyek.

  9. Pilih OK untuk membuat solusi dan proyek.

  1. Buka Visual Studio. Dari bilah menu, pilih File>New>Project.

  2. Dalam dialog Proyek Baru, pilih Templat>Visual C++>Win32.

  3. Pilih Aplikasi Konsol Win32.

  4. Dalam kotak teks Nama , masukkan CodeDefects.

  5. Dalam kotak teks Nama solusi, masukkan CppDemo.

  6. Pilih OK.

  7. Dalam dialog Panduan Aplikasi Win32, pilih tombol Berikutnya.

  8. Ubah Jenis aplikasi menjadi Pustaka statis.

  9. Di bawah Opsi tambahan, batal pilih Header yang telah dikompilasi sebelumnya.

  10. Pilih Selesai untuk membuat solusi dan proyek.

Menambahkan file header dan sumber ke proyek CodeDefects

  1. Di Penjelajah Solusi, perluas CodeDefects.

  2. Klik kanan untuk membuka menu konteks untuk File Header. Pilih Tambahkan>Item Baru.

  3. Dalam kotak dialog Tambahkan Item Baru, pilih Visual C++>Code, lalu pilih File Header (.h).

  4. Dalam kotak Edit nama , masukkan Bug.h, lalu pilih tombol Tambahkan .

  5. Di jendela edit untuk Bug.h, pilih dan hapus konten.

  6. Salin kode berikut dan tempelkan ke file Bug.h di 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. Di Penjelajah Solusi, klik kanan untuk membuka menu konteks untuk File Sumber. Pilih Tambahkan>Item Baru.

  8. Dalam kotak dialog Tambahkan Item Baru, pilih File C++ (.cpp).

  9. Dalam kotak Edit nama , masukkan Bug.cpp, lalu pilih tombol Tambahkan .

  10. Salin kode berikut dan tempelkan ke file Bug.cpp di 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. Pada bilah menu, pilih Simpan Semua File>.

Menambahkan proyek Anotasi dan mengonfigurasinya sebagai pustaka statis

  1. Di Penjelajah Solusi, klik kanan CppDemo untuk membuka menu konteks. Pilih Tambahkan>Proyek Baru.

  2. Dalam kotak dialog Tambahkan proyek baru, pilih Windows Desktop Wizard, lalu pilih tombol Berikutnya .

  3. Pada halaman Konfigurasikan proyek baru Anda, dalam kotak teks Nama proyek, masukkan Anotasi, lalu pilih Buat.

  4. Dalam dialog Proyek Desktop Windows, ubah Jenis aplikasi menjadi Pustaka Statis (.lib).

  5. Di bawah Opsi tambahan, pilih Kosongkan proyek.

  6. Pilih OK untuk membuat proyek.

  1. Di Penjelajah Solusi, klik kanan CppDemo untuk membuka menu konteks. Pilih Tambahkan>Proyek Baru.

  2. Dalam dialog Tambahkan Proyek Baru, pilih Visual C++>Windows Desktop.

  3. Pilih Panduan Desktop Windows.

  4. Dalam kotak teks Nama , masukkan Anotasi, lalu pilih OK.

  5. Dalam dialog Proyek Desktop Windows, ubah Jenis aplikasi menjadi Pustaka Statis (.lib).

  6. Di bawah Opsi tambahan, pilih Kosongkan proyek.

  7. Pilih OK untuk membuat proyek.

  1. Di Penjelajah Solusi, klik kanan CppDemo untuk membuka menu konteks. Pilih Tambahkan>Proyek Baru.

  2. Dalam dialog Tambahkan Proyek Baru, pilih Visual C++>Win32.

  3. Pilih Aplikasi Konsol Win32.

  4. Dalam kotak teks Nama , masukkan Anotasi.

  5. Pilih OK.

  6. Dalam dialog Panduan Aplikasi Win32, pilih tombol Berikutnya.

  7. Ubah Jenis aplikasi menjadi Pustaka statis.

  8. Di bawah Opsi tambahan, batal pilih Header yang telah dikompilasi sebelumnya.

  9. Pilih Selesai untuk membuat proyek.

Menambahkan file header dan file sumber ke proyek Anotasi

  1. Di Penjelajah Solusi, perluas Anotasi.

  2. Klik kanan untuk membuka menu konteks untuk File Header di bawah Anotasi. Pilih Tambahkan>Item Baru.

  3. Dalam kotak dialog Tambahkan Item Baru, pilih Visual C++>Code, lalu pilih File Header (.h).

  4. Dalam kotak Edit nama , masukkan anotasi.h, lalu pilih tombol Tambahkan .

  5. Di jendela edit untuk anotasi.h, pilih dan hapus konten.

  6. Salin kode berikut dan tempelkan ke file anotasis.h di editor.

    #pragma once
    #include <sal.h>
    
    struct LinkedList
    {
        struct LinkedList* next;
        int data;
    };
    
    typedef struct LinkedList LinkedList;
    
    _Ret_maybenull_ LinkedList* AllocateNode();
    
  7. Di Penjelajah Solusi, klik kanan untuk membuka menu konteks untuk File Sumber di bawah Anotasi. Pilih Tambahkan>Item Baru.

  8. Dalam kotak dialog Tambahkan Item Baru, pilih File C++ (.cpp).

  9. Dalam kotak Edit nama , masukkan anotasi.cpp, lalu pilih tombol Tambahkan .

  10. Salin kode berikut dan tempelkan ke dalam file anotasis.cpp di 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. Pada bilah menu, pilih Simpan Semua File>.

Solusinya sekarang selesai dan harus dibangun tanpa kesalahan.

Catatan

Di Visual Studio 2017, Anda mungkin melihat peringatan E1097 unknown attribute "no_init_all" memacu di mesin IntelliSense. Anda dapat dengan aman mengabaikan peringatan ini.