Udostępnij za pośrednictwem


Wskazówki: analizowanie kodu C++ pod względem wad

W tym instruktażu przedstawiono sposób analizowania kodu C/C++ za potencjalne wady kodu za pomocą narzędzia analizy kodu dla kodu C/C++.

W tym instruktażu krok w procesie za pomocą analizy kodu do analizowania kodu C/C++ za potencjalne wady kod.

Będzie wykonać następujące czynności:

  • Uruchomienie analizy kodu w kodzie macierzystym.

  • Analizować kod wada ostrzeżenia.

  • Traktuj ostrzeżenia jako błędy.

  • Opisywanie kod źródłowy do poprawy analizy wada kodu.

Wymagania wstępne

  • Visual Studio Premium lub Visual Studio Ultimate.

  • Kopię Przykład.

  • Podstawy języka C/C++.

Aby uruchomić kod wada analizy na kodu macierzystego

  1. Otwórz rozwiązanie Demo w Visual Studio.

    Roztwór Demo wypełni teraz Solution Explorer.

  2. Na budować menu, kliknij przycisk Roztwór odbudować.

    Rozwiązanie opiera się bez błędów lub ostrzeżeń.

  3. W Solution Explorer, zaznacz projekt, CodeDefects.

  4. W menu Projekt, kliknij Właściwości.

    CodeDefects stron właściwości zostanie wyświetlone okno dialogowe.

  5. Kliknij Analiza kodu.

  6. Kliknij przycisk Włączyć analizy kodu w języku C/c++ na kompilacji pole wyboru.

  7. Odbuduj projekt, CodeDefects.

    Kod analizy ostrzeżenia są wyświetlane w Lista błędów.

Do analizowania kodu wada ostrzeżenia

  1. W menu Widok, kliknij Lista błędów.

    W zależności od profilu autora, który został wybrany w Visual Studio, może być konieczne wskaż Windows inne na widoku menu, a następnie kliknij Lista błędów.

  2. W Lista błędów, kliknij dwukrotnie następujące ostrzeżenie:

    Ostrzeżenie C6230: niejawnego oddania semantycznie różne typy: za pomocą HRESULT w kontekście Boolean.

    Edytor kodu wyświetla wiersz, która spowodowała ostrzeżenie w funkcji boolProcessDomain().To ostrzeżenie wskazuje, że wartość HRESULT jest obecnie używany w instrukcji "if" gdzie oczekiwany wynik będący wartością logiczną.

  3. Popraw to ostrzeżenie za pomocą makra powiodło się.Kod powinien przypominać następujący kod:

    if (SUCCEEDED (ReadUserAccount()) )
    
  4. W Lista błędów, kliknij dwukrotnie następujące ostrzeżenie:

    Ostrzeżenie C6282: nieprawidłowy operator: przypisanie do stałej w kontekście badania.Był == zamierzone?

  5. Popraw to ostrzeżenie za badania na rzecz równości.Kod powinien wyglądać podobnie do poniższego kodu:

    if ((len == ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != '\\'))
    

Traktowanie ostrzeżenie jako błąd

  1. Dodać następujący wpis w pliku Bug.cpp #pragma instrukcji na początku pliku w leczeniu C6001 ostrzeżenie jako błąd:

    #pragma warning (error: 6001)
    
  2. Odbuduj projekt, CodeDefects.

    W Lista błędów, C6001 jest teraz wyświetlany jako błąd.

  3. Pozostałe dwa błędy C6001 w Lista błędów inicjalizując i i j na 0.

  4. Odbuduj projekt, CodeDefects.

    Projekt skompiluje się bez żadnych ostrzeżeń lub błędów.

Aby poprawić ostrzeżenia adnotacji kodu źródłowego w annotation.c

  1. W oknie Solution Explorer wybierz projekt, adnotacje.

  2. W menu Projekt, kliknij Właściwości.

    Stron właściwości adnotacji zostanie wyświetlone okno dialogowe.

  3. Kliknij Analiza kodu.

  4. Wybierz Włączyć analizy kodu w języku C/c++ na kompilacji pole wyboru.

  5. Odbuduj projekt, adnotacje.

  6. W Lista błędów, kliknij dwukrotnie następujące ostrzeżenie:

    Ostrzeżenie C6011: dereferencji wskaźnik NULL 'newNode'.

    To ostrzeżenie wskazuje niepowodzenie sprawdzenie wartości zwracanej przez obiekt wywołujący.W tym przypadku wywołanie AllocateNode mogą zwracać wartość NULL (patrz annotations.h pliku nagłówka dla deklaracji funkcji dla AllocateNode).

  7. Otwórz plik annotations.cpp.

  8. Aby rozwiązać tego ostrzeżenia, należy użyć instrukcji "if" do testowania wartości zwracanej.Kod powinien przypominać następujący kod:

    if (NULL != newNode)

    {

    newNode->data = value;

    newNode->next = 0;

    node->next = newNode;

    }

  9. Odbuduj projekt, adnotacje.

    Projekt skompiluje się bez żadnych ostrzeżeń lub błędów.

Aby użyć adnotacji kodu źródłowego

  1. Opisywanie parametrów formalnych i zwrócenie wartości funkcji AddTail za pomocą warunków przed i po, jak pokazano w poniższym przykładzie:

    [returnvalue:SA_Post (Null=SA_Maybe)] LinkedList* AddTail

    (

        [SA_Pre(Null=SA_Maybe)] LinkedList* node,

        int value

     )

  2. Odbuduj projekt adnotacje.

  3. W Lista błędów, kliknij dwukrotnie następujące ostrzeżenie:

    Ostrzeżenie C6011: dereferencji wskaźnik o wartości NULL "node".

    To ostrzeżenie oznacza, że węzeł przekazany do funkcji może być null i wskazuje numer wiersza, w którym podniesiono ostrzeżenie.

  4. Aby rozwiązać tego ostrzeżenia, należy użyć instrukcji "if" do testowania wartości zwracanej.Kod powinien przypominać następujący kod:

      . . .
      LinkedList *newNode = NULL; 
      if (NULL == node)
      {
           return NULL;
          . . .
      }
    
  5. Odbuduj projekt adnotacje.

    Projekt skompiluje się bez żadnych ostrzeżeń lub błędów.

Zobacz też

Zadania

Wskazówki: analizowanie zarządzanego kodu pod względem wad kodu