tutorial - C/C++ ¿Alternativa libre a Lint?
cppcheck (8)
Estoy interesado en una herramienta gratuita que pueda verificar estáticamente mi código C ++ como lo hace Lint. ¿Algún consejo?
¿ Splint ?
Es posible que desee verificar este proyecto:
- Vera++ basado en reglas definidas por el usuario (escritas en Tcl, Python o Lua)
Y pocos no libres :
- QAC++
- Coverity
- Klocwork
- Abraxas CodeCheck - escuchó varias opiniones ...
Otra herramienta para la lista: Google cpplint.py , que mentions guía de estilo C ++ de Google. Es muy específico de Google, pero no obstante.
Personalmente probé cppcheck (v1.4) y lo encontré sin esperanza.
p.ej. Este ejemplo se detectó correctamente para la matriz fuera de límites:
int a[4];
for (int n = 0; n < 5; n++)
{
a[n] = n;
}
Pero este ejemplo no fue detectado:
int a[4];
int z = 4 + 1;
for (int n = 0; n < z; n++)
{
a[n] = n;
}
Prueba nsiqcppstyle , un verificador de estilo C ++ escrito en python.
Tal vez una lista como esta es lo que estás buscando:
http://en.wikipedia.org/wiki/List_of_tools_for_static_code_analysis
Pruebe cppcheck
, que se encuentra aquí: http://cppcheck.sourceforge.net/
Aquí hay una muestra de algunos de los controles que puede realizar o para los que los he usado:
- Los índices de matriz están fuera de los límites
- Fugas de memoria / recursos
- Impropio nuevo / eliminar
- No poner destructores virtuales en las clases derivadas
- Asignación y desasignación no coincidentes
- Desasignación de un puntero desasignado
- Usar la variable después de ser desasignada / liberada
- Discrepancias de tamaño
- Raíz inválida en llamada a
strtol
ostrtoul
- Búfers de datos superpuestos
- División sin firmar; el resultado puede ser incorrecto
- Aritmética de puntero inusual
- Devolución del puntero a la variable de matriz local
- El mismo iterador se usa con dos contenedores
- Uso peligroso de borrar
- Después de pushback o pushfront, el iterador puede ser inválido
- Sobrecarga de búfer
- Uso peligroso de
strncat
, posible desbordamiento de búfer