Compartir a través de


Proyecto de ejemplo de C++ para el análisis de código

Los procedimientos siguientes muestran cómo crear el ejemplo de Tutorial: Análisis de código de C/C++ para detectar defectos. El procedimiento crea:

  • Una solución de Visual Studio denominada CppDemo.

  • Un proyecto de biblioteca estática denominado CodeDefects.

  • Un proyecto de biblioteca estática denominado Annotations.

Los procedimientos también proporcionan el código para el encabezado y los archivos .cpp para las bibliotecas estáticas.

Crear la solución CppDemo y el proyecto CodeDefects

  1. Abra Visual Studio y seleccione Crear un nuevo proyecto.

  2. En el cuadro de diálogo Crear un nuevo proyecto, cambie el filtro de lenguaje a C++.

  3. Seleccione el Asistente para escritorio de Windows y elija el botón Siguiente.

  4. En la página Configurar el nuevo proyecto, escriba CodeDefects en el cuadro Nombre del proyecto.

  5. En el cuadro de texto Nombre de la solución, escriba CppDemo.

  6. Elija Crear.

  7. En el cuadro de diálogo Proyecto de escritorio de Windows, cambie el valor de Tipo de aplicación a Biblioteca estática (.lib).

  8. En Opciones adicionales, seleccione Proyecto vacío.

  9. Elija Aceptar para crear la solución y el proyecto.

  1. Abierto Visual Studio. En la barra de menús, elija Archivo>Nuevo>Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, seleccione Visual C++>Escritorio de Windows.

  3. Seleccione Asistente para escritorio de Windows.

  4. En el cuadro de texto Nombre, escriba CodeDefects.

  5. En el cuadro de texto Nombre de la solución, escriba CppDemo.

  6. Elija Aceptar.

  7. En el cuadro de diálogo Proyecto de escritorio de Windows, cambie el valor de Tipo de aplicación a Biblioteca estática (.lib).

  8. En Opciones adicionales, seleccione Proyecto vacío.

  9. Elija Aceptar para crear la solución y el proyecto.

  1. Abierto Visual Studio. En la barra de menús, elija Archivo>Nuevo>Proyecto.

  2. En el cuadro de diálogo Nuevo proyecto, seleccione Plantillas>Visual C++>Win32.

  3. Seleccione Aplicación de consola Win32.

  4. En el cuadro de texto Nombre, escriba CodeDefects.

  5. En el cuadro de texto Nombre de la solución, escriba CppDemo.

  6. Elija Aceptar.

  7. En el cuadro de diálogo Asistente para aplicaciones Win32, elija el botón Siguiente.

  8. Cambie Tipo de aplicación a Biblioteca estática.

  9. En Opciones adicionales, desactive la casilla Encabezado precompilado.

  10. Seleccione Finalizar para crear la solución y el proyecto.

Agregar el archivo de encabezado y código fuente al proyecto CodeDefects

  1. En el Explorador de soluciones, expanda CodeDefects.

  2. Haga clic con el botón derecho para abrir el menú contextual de Archivos de encabezado. Elija Agregar>Nuevo elemento.

  3. En el cuadro de diálogo Agregar nuevo elemento, seleccione Visual C++>Código y, luego, elija Archivo de encabezado (.h).

  4. En el cuadro de edición Nombre, escriba Bug.h y, luego, elija el botón Agregar.

  5. En la ventana de edición de Bug.h, seleccione y elimine el contenido.

  6. Copie el código siguiente y péguelo en el archivo Bug.h en el editor.

    #pragma once
    
    #include <windows.h>
    
    // Function prototypes
    bool CheckDomain(wchar_t const *);
    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;
    
  7. En el Explorador de soluciones, haga clic con el botón derecho para abrir el menú contextual de Archivos de origen. Elija Agregar>Nuevo elemento.

  8. En el cuadro de diálogo Agregar nuevo elemento , seleccione Archivo C++ (.cpp).

  9. En el cuadro de edición Nombre, escriba Bug.cpp y, luego, elija el botón Agregar.

  10. Copie el código siguiente y péguelo en el archivo Bug.cpp en el editor.

    #include "Bug.h"
    
    // the user account
    wchar_t g_userAccount[USER_ACCOUNT_LEN] = { L"domain\\user" };
    int len = 0;
    
    bool CheckDomain(wchar_t const* domain)
    {
        return (wcsnlen_s(domain, USER_ACCOUNT_LEN) > 0);
    }
    
    HRESULT ReadUserAccount()
    {
        return S_OK;
    }
    
    bool ProcessDomain()
    {
        wchar_t* domain = new wchar_t[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] != L'\0'); len++)
            {
                if (g_userAccount[len] == L'\\')
                {
                    // Stops copying on the domain and user separator ('\')
                    break;
                }
                domain[len] = g_userAccount[len];
            }
            if ((len = ACCOUNT_DOMAIN_LEN) || (g_userAccount[len] != L'\\'))
            {
                // '\' was not found. Invalid domain\user string.
                delete[] domain;
                return false;
            }
            else
            {
                domain[len] = L'\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;
    }
    
  11. En la barra de menús, pulse Archivo>Guardar todo.

Agregar el proyecto Annotations y configurarlo como una biblioteca estática

  1. En el Explorador de soluciones, haga clic con el botón derecho en CppDemo para abrir el menú contextual. Elija Agregar>Nuevo proyecto.

  2. En el cuadro de diálogo Agregar un nuevo proyecto, seleccione Asistente para escritorio de Windows y, luego, elija el botón Siguiente.

  3. En la página Configurar el nuevo proyecto, en el cuadro de texto Nombre del proyecto, escriba Annotations y, después, elija Crear.

  4. En el cuadro de diálogo Proyecto de escritorio de Windows, cambie el valor de Tipo de aplicación a Biblioteca estática (.lib).

  5. En Opciones adicionales, seleccione Proyecto vacío.

  6. Elija Aceptar para crear el proyecto.

  1. En el Explorador de soluciones, haga clic con el botón derecho en CppDemo para abrir el menú contextual. Elija Agregar>Nuevo proyecto.

  2. En el cuadro de diálogo Agregar nuevo proyecto, seleccione Visual C++>Escritorio de Windows.

  3. Seleccione Asistente para escritorio de Windows.

  4. En el cuadro de texto Nombre, escriba Annotations y elija el botón Aceptar.

  5. En el cuadro de diálogo Proyecto de escritorio de Windows, cambie el valor de Tipo de aplicación a Biblioteca estática (.lib).

  6. En Opciones adicionales, seleccione Proyecto vacío.

  7. Elija Aceptar para crear el proyecto.

  1. En el Explorador de soluciones, haga clic con el botón derecho en CppDemo para abrir el menú contextual. Elija Agregar>Nuevo proyecto.

  2. En el cuadro de diálogo Agregar nuevo proyecto, seleccione Visual C++>Win32.

  3. Seleccione Aplicación de consola Win32.

  4. En el cuadro de texto Nombre, escriba Annotations.

  5. Elija Aceptar.

  6. En el cuadro de diálogo Asistente para aplicaciones Win32, elija el botón Siguiente.

  7. Cambie Tipo de aplicación a Biblioteca estática.

  8. En Opciones adicionales, desactive la casilla Encabezado precompilado.

  9. Haga clic en Finalizar para crear el proyecto.

Agregar el archivo de encabezado y código fuente al proyecto Annotations

  1. En el Explorador de soluciones, expanda Annotations.

  2. Haga clic con el botón derecho para abrir el menú contextual de Archivos de encabezado en Annotations. Elija Agregar>Nuevo elemento.

  3. En el cuadro de diálogo Agregar nuevo elemento, seleccione Visual C++>Código y, luego, elija Archivo de encabezado (.h).

  4. En el cuadro de edición Nombre, escriba annotations.h y, luego, elija el botón Agregar.

  5. En la ventana de edición de annotations.h, seleccione y elimine el contenido.

  6. Copie el código siguiente y péguelo en el archivo annotations.h en el editor.

    #pragma once
    #include <sal.h>
    
    struct LinkedList
    {
        struct LinkedList* next;
        int data;
    };
    
    typedef struct LinkedList LinkedList;
    
    _Ret_maybenull_ LinkedList* AllocateNode();
    
  7. En el Explorador de soluciones, haga clic con el botón derecho para abrir el menú contextual de Archivos de origen en Annotations. Elija Agregar>Nuevo elemento.

  8. En el cuadro de diálogo Agregar nuevo elemento , seleccione Archivo C++ (.cpp).

  9. En el cuadro de edición Nombre, escriba annotations.cpp y, luego, elija el botón Agregar.

  10. Copie el código siguiente y péguelo en el archivo annotations.cpp en el editor.

    #include "annotations.h"
    #include <malloc.h>
    
    _Ret_maybenull_ LinkedList* AllocateNode()
    {
        LinkedList* result = static_cast<LinkedList*>(malloc(sizeof(LinkedList)));
        return result;
    }
    
    LinkedList* AddTail(LinkedList* node, int value)
    {
        // finds the last node
        while (node->next != nullptr)
        {
            node = node->next;
        }
    
        // appends the new node
        LinkedList* newNode = AllocateNode();
        newNode->data = value;
        newNode->next = 0;
        node->next = newNode;
    
        return newNode;
    }
    
  11. En la barra de menús, pulse Archivo>Guardar todo.

La solución ya está completa y debe compilarse sin errores.

Nota:

En Visual Studio 2017, es posible que vea una advertencia E1097 unknown attribute "no_init_all" falsa en el motor de IntelliSense. Puede omitir con seguridad esta advertencia.