Instruções passo a passo: analisando o código C/C++ em busca de defeitos
Este passo a passo demonstra como analisar o código C/C++ para possíveis defeitos de código. Ele usa as ferramentas de análise de código para código C/C++.
Neste passo a passo, você realizará as seguintes tarefas:
- Executar a análise de código no código nativo.
- Analisar avisos de defeito de código.
- Tratar um aviso como erro.
- Anotar o código-fonte para aprimorar a análise de defeitos de código.
Pré-requisitos
- Uma cópia do exemplo de CppDemo.
- Noções básicas sobre C/C++.
Executar a análise de código no código nativo
Para executar a análise de defeitos do código no código nativo
Abra a solução CppDemo no Visual Studio.
A solução CppDemo agora preenche o Gerenciador de Soluções.
No menu Compilar, escolha Recompilar Solução.
A solução é compilada sem erros nem avisos.
No Gerenciador de Soluções, selecione o projeto CodeDefects.
No menu Projeto, escolha Propriedades.
A caixa de diálogo Páginas de Propriedades de CodeDefects é exibida.
Página de propriedades de Análise de Código.
Altere a propriedade Habilitar Análise de Código ao Compilar para Sim. Escolha OK para salvar suas alterações.
Recompile o projeto CodeDefects.
Os avisos da análise de código são exibidos na janela Lista de Erros.
Abra a solução CppDemo no Visual Studio.
A solução CppDemo agora preenche o Gerenciador de Soluções.
No menu Compilar, escolha Recompilar Solução.
A solução é compilada sem erros nem avisos.
Observação
No Visual Studio 2017, você pode ver um aviso
E1097 unknown attribute "no_init_all"
espúrio no mecanismo IntelliSense. Ignore esse erro.No Gerenciador de Soluções, selecione o projeto CodeDefects.
No menu Projeto, escolha Propriedades.
A caixa de diálogo Páginas de Propriedades de CodeDefects é exibida.
Página de propriedades de Análise de Código.
Marque a caixa de seleção Habilitar Análise de Código ao Compilar. Escolha OK para salvar suas alterações.
Recompile o projeto CodeDefects.
Os avisos da análise de código são exibidos na janela Lista de Erros.
Para analisar avisos de defeito de código
No menu Exibir, escolha Lista de Erros.
Este item de menu pode não estar visível. Isso depende do perfil do desenvolvedor que você escolheu no Visual Studio. Talvez seja necessário apontar para Outras Janelas no menu Exibir e, em seguida, escolher Lista de Erros.
Na janela Lista de Erros, clique duas vezes no seguinte aviso:
C6230: conversão implícita entre tipos semanticamente diferentes: usando HRESULT em um contexto de tipo booliano.
O editor de código exibe a linha que causou o aviso dentro da função
bool ProcessDomain()
. Esse aviso indica que anHRESULT
está sendo usado em uma instrução 'if' em que um resultado booleano é esperado. Normalmente, isso é um erro, porque quando o HRESULTS_OK
é retornado de uma função, isso indica êxito, mas quando convertido em um valor booliano, ele é avaliado comofalse
.Corrija esse aviso usando a macro
SUCCEEDED
, que é convertida emtrue
quando um valor retornadoHRESULT
indica êxito. O seu código deve ser semelhante ao seguinte:if (SUCCEEDED(ReadUserAccount()))
Na Lista de Erros, clique duas vezes no seguinte aviso:
C6282: Operador incorreto: atribuição de constante em contexto booliano. Considere o uso de '==' em seu lugar.
Corrija este aviso testando a igualdade. A aparência do seu código deve ser semelhante ao seguinte:
if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
Corrija os avisos C6001 restantes na Lista de Erros inicializando
i
ej
para 0.Recompile o projeto CodeDefects.
O projeto é compilado sem avisos nem erros.
Corrigir avisos de anotação de código-fonte
Para habilitar os avisos de anotação de código-fonte em annotation.c
No Gerenciador de Soluções, selecione o projeto Anotações.
No menu Projeto, escolha Propriedades.
A caixa de diálogo Páginas de Propriedades de Anotações é exibida.
Página de propriedades de Análise de Código.
Altere a propriedade Habilitar Análise de Código ao Compilar para Sim. Escolha OK para salvar suas alterações.
No Gerenciador de Soluções, selecione o projeto Anotações.
No menu Projeto, escolha Propriedades.
A caixa de diálogo Páginas de Propriedades de Anotações é exibida.
Página de propriedades de Análise de Código.
Marque a caixa de seleção Habilitar Análise de Código ao Compilar. Escolha OK para salvar suas alterações.
Para corrigir os avisos de anotação de código-fonte em annotation.c
Recompile o projeto Anotações.
No menu Compilar, escolha Executar Análise de Código em Anotações.
Na Lista de Erros, clique duas vezes no seguinte aviso:
C6011: desreferenciando o ponteiro nulo 'newNode'.
Esse aviso indica falha do chamador para verificar o valor retornado. Nesse caso, uma chamada para
AllocateNode
pode retornar um valor NULL. Confira o arquivo de cabeçalho annotations.h para a declaração de função paraAllocateNode
.O cursor está no local do arquivo annotations.cpp em que o aviso ocorreu.
Para corrigir esse aviso, use uma instrução "if" para testar o valor retornado. O seu código deve ser semelhante ao seguinte:
LinkedList* newNode = AllocateNode(); if (nullptr != newNode) { newNode->data = value; newNode->next = 0; node->next = newNode; }
Recompile o projeto Anotações.
O projeto é compilado sem avisos nem erros.
Usar anotação de código-fonte para descobrir mais problemas
Para usar a anotação de código-fonte
Anote os parâmetros formais e o valor retornado da função
AddTail
para indicar que os valores de ponteiro podem ser nulos:_Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
No menu Compilar, escolha Executar Análise de Código na Solução.
Na Lista de Erros, clique duas vezes no seguinte aviso:
C6011: Desreferenciando o ponteiro nulo 'node'.
Esse aviso indica que o nó passado para a função pode ser nulo.
Para corrigir esse aviso, use uma instrução "if" no início da função para testar o valor passado. O seu código deve ser semelhante ao seguinte:
if (nullptr == node) { return nullptr; }
No menu Compilar, escolha Executar Análise de Código na Solução.
O projeto agora é compilado sem avisos nem erros.
Confira também
Instruções passo a passo: analisando código gerenciado em busca de defeitos de código
Análise de código para C/C++