Partager via


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

  • Copie de l’exemple CppDemo.
  • Compréhension de base de C/C++.

Exécuter l’analyse du code sur du code natif

Pour exécuter l’analyse des défauts de code sur du code natif

  1. Ouvrez la solution CppDemo dans Visual Studio.

    La solution CppDemo remplit désormais Explorateur de solutions.

  2. Dans le menu Générer, choisissez Générer la solution.

    La solution s’génère sans erreur ni avertissement.

  3. Dans Explorateur de solutions, sélectionnez le projet CodeDefects.

  4. Dans le menu Projet , choisissez Propriétés.

    La boîte de dialogue Pages de propriétés CodeDefects s’affiche.

  5. Sélectionnez la page de propriétés Analyse du code.

  6. Modifiez la propriété Activer l’analyse du code sur Build sur Oui. Sélectionnez OK pour enregistrer vos modifications.

  7. Régénérez le projet CodeDefects.

    Les avertissements d’analyse du code s’affichent dans la fenêtre Liste d’erreurs.

  1. Ouvrez la solution CppDemo dans Visual Studio.

    La solution CppDemo remplit désormais Explorateur de solutions.

  2. 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é.

  3. Dans Explorateur de solutions, sélectionnez le projet CodeDefects.

  4. Dans le menu Projet , choisissez Propriétés.

    La boîte de dialogue Pages de propriétés CodeDefects s’affiche.

  5. Sélectionnez la page de propriétés Analyse du code.

  6. Activez la case à cocher Activer l’analyse du code sur build . Sélectionnez OK pour enregistrer vos modifications.

  7. 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

  1. 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.

  2. 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’un HRESULT é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 le S_OK HRESULT est retourné à partir d’une fonction, il indique la réussite, mais lorsqu’il est converti en valeur booléenne, il prend falsela valeur .

  3. Corrigez cet avertissement à l’aide de la SUCCEEDED macro, qui se convertit en true cas de réussite d’une HRESULT valeur de retour. Votre code doit ressembler au code suivant :

    if (SUCCEEDED(ReadUserAccount()))
    
  4. 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 '=='.

  5. Corrigez cet avertissement en testant l’égalité. Votre code doit ressembler au code suivant :

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
    
  6. Corrigez les avertissements C6001 restants dans la liste d’erreurs en initialisant i et j en 0.

  7. 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

  1. Dans Explorateur de solutions, sélectionnez le projet Annotations.

  2. Dans le menu Projet , choisissez Propriétés.

    La boîte de dialogue Pages de propriétés annotations s’affiche.

  3. Sélectionnez la page de propriétés Analyse du code.

  4. Modifiez la propriété Activer l’analyse du code sur Build sur Oui. Sélectionnez OK pour enregistrer vos modifications.

  1. Dans Explorateur de solutions, sélectionnez le projet Annotations.

  2. Dans le menu Projet , choisissez Propriétés.

    La boîte de dialogue Pages de propriétés annotations s’affiche.

  3. Sélectionnez la page de propriétés Analyse du code.

  4. 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

  1. Regénérer le projet Annotations.

  2. Dans le menu Générer , choisissez Exécuter l’analyse du code sur les annotations.

  3. 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 pour AllocateNode.

  4. Le curseur se trouve à l’emplacement dans le fichier annotations.cpp où l’avertissement s’est produit.

  5. 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;
    }
    
  6. 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

  1. 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)
    
  2. Dans le menu Générer, choisissez Exécuter l’analyse du code sur la solution.

  3. 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.

  4. 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;
    }
    
  5. 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++