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]
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] .
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.
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/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.cDespué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.
Admite la integración con varias herramientas de desarrollo [10] :