Procédure pas à pas : analyse du code C/C++ pour les défauts
Cette procédure pas à pas montre comment analyser le code C/C++ pour détecter les défauts potentiels du code. Il utilise les outils d’analyse du code pour le code C/C++.
Dans cette procédure pas à pas, vous allez :
- Exécutez l’analyse du code sur du code natif.
- Analyser les avertissements des défauts de code.
- Traitez l’avertissement comme une erreur.
- Annotez le code source pour améliorer l’analyse des défauts de code.
Prérequis
Exécuter l’analyse du code sur du code natif
Pour exécuter l’analyse des défauts de code sur du code natif
Ouvrez la solution CppDemo dans Visual Studio.
La solution CppDemo remplit désormais Explorateur de solutions.
Dans le menu Générer, choisissez Générer la solution.
La solution s’génère sans erreur ni avertissement.
Dans Explorateur de solutions, sélectionnez le projet CodeDefects.
Dans le menu Projet , choisissez Propriétés.
La boîte de dialogue Pages de propriétés CodeDefects s’affiche.
Sélectionnez la page de propriétés Analyse du code.
Modifiez la propriété Activer l’analyse du code sur Build sur Oui. Sélectionnez OK pour enregistrer vos modifications.
Régénérez le projet CodeDefects.
Les avertissements d’analyse du code s’affichent dans la fenêtre Liste d’erreurs.
Ouvrez la solution CppDemo dans Visual Studio.
La solution CppDemo remplit désormais Explorateur de solutions.
Dans le menu Générer, choisissez Générer la solution.
La solution s’génère sans erreur ni avertissement.
Remarque
Dans Visual Studio 2017, vous pouvez voir un avertissement
E1097 unknown attribute "no_init_all"
faux dans le moteur IntelliSense. Vous pouvez ignorer cet avertissement en toute sécurité.Dans Explorateur de solutions, sélectionnez le projet CodeDefects.
Dans le menu Projet , choisissez Propriétés.
La boîte de dialogue Pages de propriétés CodeDefects s’affiche.
Sélectionnez la page de propriétés Analyse du code.
Activez la case à cocher Activer l’analyse du code sur build . Sélectionnez OK pour enregistrer vos modifications.
Régénérez le projet CodeDefects.
Les avertissements d’analyse du code s’affichent dans la fenêtre Liste d’erreurs.
Pour analyser les avertissements des défauts de code
Dans le menu Affichage, choisissez Liste d’erreurs.
Cet élément de menu peut ne pas être visible. Cela dépend du profil de développeur que vous avez choisi dans Visual Studio. Vous devrez peut-être pointer vers d’autres fenêtres dans le menu Affichage , puis choisir Liste d’erreurs.
Dans la fenêtre Liste d’erreurs, double-cliquez sur l’avertissement suivant :
C6230 : Conversion implicite entre différents types sémantiquement différents : utilisation de HRESULT dans un contexte booléen.
L’éditeur de code affiche la ligne qui a provoqué l’avertissement à l’intérieur de la fonction
bool ProcessDomain()
. Cet avertissement indique qu’unHRESULT
élément est utilisé dans une instruction 'if' où un résultat booléen est attendu. Il s’agit généralement d’une erreur, car lorsque leS_OK
HRESULT est retourné à partir d’une fonction, il indique la réussite, mais lorsqu’il est converti en valeur booléenne, il prendfalse
la valeur .Corrigez cet avertissement à l’aide de la
SUCCEEDED
macro, qui se convertit entrue
cas de réussite d’uneHRESULT
valeur de retour. Votre code doit ressembler au code suivant :if (SUCCEEDED(ReadUserAccount()))
Dans la liste d’erreurs, double-cliquez sur l’avertissement suivant :
C6282 : Opérateur incorrect : affectation d’une constante dans le contexte booléen. Envisagez plutôt d’utiliser '=='.
Corrigez cet avertissement en testant l’égalité. Votre code doit ressembler au code suivant :
if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
Corrigez les avertissements C6001 restants dans la liste d’erreurs en initialisant
i
etj
en 0.Régénérez le projet CodeDefects.
Le projet est généré sans avertissements ni erreurs.
Avertissements d’annotation de code source corrects
Pour activer les avertissements d’annotation de code source dans annotation.c
Dans Explorateur de solutions, sélectionnez le projet Annotations.
Dans le menu Projet , choisissez Propriétés.
La boîte de dialogue Pages de propriétés annotations s’affiche.
Sélectionnez la page de propriétés Analyse du code.
Modifiez la propriété Activer l’analyse du code sur Build sur Oui. Sélectionnez OK pour enregistrer vos modifications.
Dans Explorateur de solutions, sélectionnez le projet Annotations.
Dans le menu Projet , choisissez Propriétés.
La boîte de dialogue Pages de propriétés annotations s’affiche.
Sélectionnez la page de propriétés Analyse du code.
Activez la case à cocher Activer l’analyse du code sur build . Sélectionnez OK pour enregistrer vos modifications.
Pour corriger les avertissements d’annotation de code source dans annotation.c
Regénérer le projet Annotations.
Dans le menu Générer , choisissez Exécuter l’analyse du code sur les annotations.
Dans la liste d’erreurs, double-cliquez sur l’avertissement suivant :
C6011 : Déreferencing NULL pointeur 'newNode'.
Cet avertissement indique l’échec de l’appelant pour vérifier la valeur de retour. Dans ce cas, un appel peut renvoyer
AllocateNode
une valeur NULL. Consultez le fichier d’en-tête annotations.h pour la déclaration de fonction pourAllocateNode
.Le curseur se trouve à l’emplacement dans le fichier annotations.cpp où l’avertissement s’est produit.
Pour corriger cet avertissement, utilisez une instruction « if » pour tester la valeur de retour. Votre code doit ressembler au code suivant :
LinkedList* newNode = AllocateNode(); if (nullptr != newNode) { newNode->data = value; newNode->next = 0; node->next = newNode; }
Regénérer le projet Annotations.
Le projet est généré sans avertissements ni erreurs.
Utiliser l’annotation de code source pour découvrir d’autres problèmes
Pour utiliser l’annotation de code source
Annoter les paramètres formels et la valeur de retour de la fonction
AddTail
pour indiquer que les valeurs de pointeur peuvent être null :_Ret_maybenull_ LinkedList* AddTail(_Maybenull_ LinkedList* node, int value)
Dans le menu Générer, choisissez Exécuter l’analyse du code sur la solution.
Dans la liste d’erreurs, double-cliquez sur l’avertissement suivant :
C6011 : Déreferencing null pointeur 'node'.
Cet avertissement indique que le nœud passé dans la fonction peut être null.
Pour corriger cet avertissement, utilisez une instruction « if » au début de la fonction pour tester la valeur passée. Votre code doit ressembler au code suivant :
if (nullptr == node) { return nullptr; }
Dans le menu Générer, choisissez Exécuter l’analyse du code sur la solution.
Le projet se génère désormais sans avertissements ni erreurs.
Voir aussi
Procédure pas à pas : analyse du code managé pour les erreurs de code
Code Analysis pour C/C++