Comprobación de CPP

Comprobación de CPP
Tipo de Analizador de código estático
Escrito en C++
Sistema operativo Sistema operativo similar a Unix
Primera edición 8 de mayo de 2007
ultima versión
Licencia GPLv3
Sitio web cppcheck.sourceforge.net

Cppcheck  es un analizador de código estático para el lenguaje C / C++ , diseñado para encontrar errores que no son detectados por los compiladores. El objetivo principal del proyecto es minimizar el número de falsos positivos al buscar errores [2] .

El analizador puede verificar secciones de código no estándar, incluido el uso de extensiones de compilador , ensamblador en línea , etc. [3]

Características

Detecta varios tipos de errores en los programas [4] .

También le permite descargar y conectar reglas [5] y adiciones [6] desde los repositorios de cppcheck. Las reglas personalizadas para cheques se pueden agregar a través de expresiones regulares [3] .

Es posible refinar el estándar al que se ajusta el código verificado. Se admiten los siguientes estándares: C89 , C99 , C11 , C++03 , C++11 , POSIX . Al mismo tiempo, puede especificar varios estándares a la vez (por ejemplo, C11 y POSIX) [7] .

Además del estándar, puede especificar la plataforma de destino para una detección de errores más precisa. Cada plataforma define tamaños para los tipos de datos básicos y los tipos de datos específicos de la plataforma [3] . Entre los disponibles, puede especificar un sistema operativo tipo UNIX o un sistema operativo Windows con una profundidad de bits de 32 o 64 bits [7] .

Características del análisis estático

Antes de realizar el análisis estático , el código fuente se convierte en una representación adecuada para un análisis posterior. El programa elimina todos los comentarios, reemplaza las macros con sus definiciones, reemplaza todas las redefiniciones de tipo con tipos de datos originales y lleva el código a un solo estilo. Si se conocen los valores de las variables, en lugar de los nombres de las variables, se sustituyen sus valores. Los nombres de las variables se agregan a sus identificadores únicos dentro del programa, lo que simplifica el análisis posterior del uso de las variables. Por ejemplo, int a;se puede reemplazar con int a@1;si la variable se declara primero en el programa. También se realizan otras simplificaciones de código para facilitar el análisis. El siguiente paso es verificar el código de acuerdo con las reglas cargadas en el programa, que hacen coincidir el código con patrones de errores críticos y de estilo. Las reglas más simples se pueden basar en el uso de expresiones regulares [8] .

Dado que no hay una ejecución real del código, los mensajes de error generados por el analizador pueden apuntar a un código escrito correctamente, lo que se denomina falsos positivos. También hay situaciones en las que el error encontrado nunca puede manifestarse durante la ejecución del código.

Uso

El trabajo con Cppcheck se realiza desde la línea de comandos. Desde la versión 1.33, también está disponible una GUI multiplataforma escrita en Qt [9] .

Para analizar uno o varios archivos fuente, basta con ejecutar el programa cppcheck, pasándole como argumentos las rutas a los archivos a comprobar. Si especifica un directorio en lugar de un nombre de archivo, el programa recorrerá recursivamente el directorio y analizará todos los archivos compilados en él [3] .

Un ejemplo de cómo ejecutar el análisis de varios archivos y un directorio en sistemas operativos tipo UNIX :

cppcheck test1.c test2.c relativo/ruta/prueba3.c /absoluto/ruta/prueba4.c proyecto/src/

Un ejemplo de comprobación de un archivo

Considere un ejemplo de un programa C con un error debido al cual se invierten el índice de la matriz y su tamaño. Archivo test.c:

#incluir <stdlib.h> #incluir <stdio.h> int principal () { caracteres [ 255 ] ; s [ 255 ] = '\0' ; devuelve SALIR_ÉXITO ; }

Para verificar un archivo test.cen busca de errores usando Cppcheck, debe ejecutar el siguiente comando:

cppcheck prueba.c

Después de ejecutar el comando, se mostrará un mensaje de error de fuera de límites al acceder a la variable s:

[test.c:7]: (error) Array 's[255]' accessed at index 255 which is out of bounds.

Integración con herramientas de desarrollo

Admite la integración con varias herramientas de desarrollo [10] :

Véase también

Notas

  1. Cppcheck-2.9
  2. Cppcheck: una herramienta para el análisis de código C/C++ estático . cppcheck.sourceforge.net. Consultado el 21 de enero de 2016. Archivado desde el original el 18 de enero de 2016.
  3. ↑ 1 2 3 4 Manual para Cppcheck versión 1.75 . Consultado el 21 de enero de 2016. Archivado desde el original el 5 de marzo de 2016.
  4. cppcheck/Wiki/ListOfChecks . sourceforge.net. Consultado el 21 de enero de 2016. Archivado desde el original el 26 de diciembre de 2015.
  5. danmar/cppcheck-rules . GitHub. Consultado el 21 de enero de 2016. Archivado desde el original el 24 de diciembre de 2015.
  6. danmar/cppcheck - complementos . GitHub. Consultado el 21 de enero de 2016. Archivado desde el original el 24 de diciembre de 2015.
  7. ↑ 1 2 Página de manual de Ubuntu: cppcheck: herramienta para el análisis de código C/C++ estático . manpages.ubuntu.com. Consultado el 31 de enero de 2016. Archivado desde el original el 25 de abril de 2016.
  8. Daniel Marjamaki. Escritura de reglas Cppcheck. Parte 2 - La representación de datos de Cppcheck  (inglés)  : sitio. - 2010. Archivado el 13 de marzo de 2016.
  9. cppcheck / Noticias: cppcheck-1.33 . sourceforge.net. Consultado el 8 de marzo de 2016. Archivado desde el original el 14 de marzo de 2016.
  10. cppcheck/Wiki/Inicio . sourceforge.net. Fecha de acceso: 21 de enero de 2016. Archivado desde el original el 27 de diciembre de 2015.
  11. Preguntas frecuentes -  (ing.) . codex.com. Fecha de acceso: 31 de enero de 2016. Archivado desde el original el 31 de enero de 2016.
  12. CoderGears, https://www.codergears.com/home . CppDepend :: Consiga una mayor calidad de código C/C++ . www.cppdepend.com. Fecha de acceso: 31 de enero de 2016. Archivado desde el original el 17 de febrero de 2016.
  13. Análisis automático de código estático antes de cargar su código . Omerez. Fecha de acceso: 21 de enero de 2016. Archivado desde el original el 21 de enero de 2016.

Enlaces