Amostra de demonstração
Os procedimentos a seguir mostram como criar o exemplo para Instruções passo a passo: analisando código do C/C++ em busca de defeitos.Os procedimentos criam:
Uma solução Visual Studio chamada CppDemo.
Um projeto de biblioteca estática chamada CodeDefects
Um projeto de biblioteca estática chamada Anotações.
Os procedimentos também fornecem o código para o cabeçalho e arquivos .cpp para as bibliotecas estáticas.
Crie a solução CppDemo e o projeto CodeDefects
Clique no menu Arquivo, aponte para Novo, e então clique em Novo Projeto.
Na lista de árvore Tipos de projeto, se o Visual C++ não é sua linguagem padrão no VS expanda Outras Linguagens.
Expanda Visual C++, então clique em Geral.
Em Modelos, clique Projeto Vazio.
Na caixa de texto Nome, digite CodeDefects.
Marque a caixa de seleção Crie diretórios para Solução.
Na caixa de texto Nome da Solução, digite CppDemo.
Configure os projetos CodeDefects como biblioteca estática.
No Gerenciador de Soluções, clique com o botão direito em CodeDefects, então clique em Propriedades.
Expanda Propriedades de Configuração então clique em Geral.
Na lista Geral, selecione o texto na coluna próxima a Extensão de Destino, depois digite .lib
No Padrões de Projeto, clique na coluna ao lado de Tipo de Configuração, então clique em Lib Estático (.lib).
Adicione o cabeçalho e o arquivo fonte ao projeto CodeDefects
No Gerenciador de Soluções, expanda CodeDefects, clique com o botão direito em Arquivos de Cabeçalho, clique em Adicionar, então clique em Novo Item.
Na caixa de diálogo Adicionar Novo Item, clique em Código, então clique em Arquivo de Cabeçalho (.h).
Na caixa Nome, digite Bug.cpp e depois clique em Adicionar.
Copie o seguinte código e cole-o no arquivo Bug.cpp no editor 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;
No Gerenciador de Soluções, clique com o botão direito em Arquivos Fonte, aponte para Novo, e então clique em Novo Item.
Na caixa de diálogo Adicionar Novo Item, clique em Arquivo C++ (.cpp)
Na caixa Nome, digite Bug.cpp e depois clique em Adicionar.
Copie o seguinte código e cole-o no arquivo Bug.h no editor 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; }
Clique no menu Arquivo, depois clique em Salvar Tudo.
Adicione o projeto de Anotações e configure-o como biblioteca estática
No Gerenciador de Soluções, clique em CppDemo, aponte para Adicionar, e depois clique em Novo Projeto.
Na caixa de diálogo Adicionar Novo Projeto, expanda Visual C++, clique em Geral, depois clique em Projeto Vazio.
Na caixa de texto Nome, digite Annotations, então clique em Adicionar.
No Gerenciador de Soluções, clique com o botão direito em Anotações, e depois clique em Propriedades.
Expanda Propriedades de Configuração então clique em Geral.
Na lista Geral, selecione o texto na coluna próxima a Extensão de Destino, depois digite .lib
No Padrões de Projeto, clique na coluna ao lado de Tipo de Configuração, então clique em Lib Estático (.lib).
Adicione o arquivo cabeçalho e o arquivo fonte ao projeto de Anotações
No Gerenciador de Soluções, expanda Anotações, clique com o botão direito do mouse em Arquivos de Cabeçalho, clique Adicionar, e depois clique em Novo Item.
Na caixa de diálogo Adicionar Novo Item, clique Arquivo de Cabeçalho (.h).
Na caixa Nome, digite annotations.h e depois clique em Adicionar.
Copie o seguinte código e cole-o no arquivo annotations.h no editor 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();
No Gerenciador de Soluções, clique com o botão direito em Arquivos Fonte, aponte para Novo, e então clique em Novo Item.
Na caixa de diálogo Adicionar Novo Item, clique em Código e depois clique em Arquivo C++ (.cpp)
Na caixa Name, digite annotations.cpp e depois clique em Add.
Copie o seguinte código e cole-o no arquivo annotations.cpp no editor 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; }
Clique no menu Arquivo, depois clique em Salvar Tudo.